@Don Sizemore, @Akio Sone, @William Hahn, @John D. Martin III, and the rest of the UNC team has given the go-ahead on merging the full https://github.com/gdcc/dataverse-jsf-tests repository into upstream.
UNC will be moving into a lower-overhead model depending heavily on upstream validation here on out.
The proposed model is a phased deployment. gdcc/dataverse-jsf-tests and uncch-rdmc/dataverse-jsf-tests will be immediately put into read-only mode. The tests will be merged into upstream, and the repositories will remain as such for a few months or so, while we at UNC figure out how we can pull upstream tests for our own use cases. Thank you!
@Philip Durbin π
Sounds great! You'll be making a PR?
There's some technical debt that I want to address first, but yes I'll be making the PR!
do you have a timeline on when upstream wants it merged?
yesterday :smile:
Which directory within the upstream repo?
tests/dataverse-jsf-tests ? or tests/playwright ?
Hmm, tests/jsf?
Shorter, sweeter. :smile:
SGTM
@Oliver Bertuch unless you want them under src/test somewhere?
https://github.com/IQSS/dataverse/issues/12797
https://github.com/IQSS/dataverse/pull/12798
This ports the repository as is
Hmm, can we remove references to UNC?
I was planning to do that post-merge, should I do it now? It'll be a while if I get to cleaning it
these tests are currently being used by CI/CD, so its a bit risky to try and edit or clean up everything
Hmm, can you at least add a note at the top of tests/jsf/README.md? TODO: Clean up these docs, blah blah or something?
for sure
awesome, thanks
and thanks for the PR!
You have @Don Sizemore to thank. He was one of the strongest advocates from the very beginning
it's like a shiny new toy
Wait, what about the GitHub Action? It's still pointing at the old repo, now archived, you said.
It will continue to point at the old repo for a while
Until I address the technical debt and remove the UNC references
so this is more of a dump, a snapshot
Exactly!
not a living thing
dead code
doesn't execute
Yep
For now
seems a bit suboptimal :sweat_smile:
It is
But if it is used in its current state and y'all start adding tests
it will be unusable in a few weeks
There's a lot of hardcoding done because I was developing it so quickly
Give me a few weeks (two or three) and I will make it fully extensible and usable for everyone
Sure, please take your time. Should I assign the PR to you? And put it in "in progress" on the board? Is that the right state?
Yep. I can also make it a draft PR if that helps
Philip Durbin π said:
Hmm, can you at least add a note at the top of tests/jsf/README.md? TODO: Clean up these docs, blah blah or something?
Added these to the top
Thanks and thanks for making it draft. I added it to "in progress" and assigned it to you.
For me, part of the definition of done is that the code not be dead. It should be executed by CI.
Mostly I'm just glad we're getting the tests upstream! :tada:
This PR has to be merged before the workflows can repoint to it anyways
we could take them live immediately after the merge
Huh. I imagined it would be one PR.
That would cause conflicts in this: https://github.com/IQSS/dataverse/pull/12783
I'm trying to go as slow as possible so that nobody's workflow is disrupted and tests remain green throughout
By phased deployment my general idea was:
Phase 1: Get a dead dump/snapshot into upstream
Phase 2: Wait for 12783 to pass review
Phase 3: Clean up UNC references, technical debt within upstream
Phase 4: Activate the tests/jsf folder
Phase 5: Re-jig this pipeline for UNC's use
I think I missed the part about phased development.
I would advocate for this as it keeps disruption to a very minimum
#12783 has merge conflicts. I put it in "ready for triage" earlier today. Is that the right status?
It's in the making releases.rst file, I might git rm it tomorrow?
thank you so much for working with me on this!
sure!
I was thinking you'd merge the latest from develop but whatever works.
Yep, I did exactly that
great
I went ahead and closed the draft PR. I liked your idea more Phil, it's supposed to be one full PR where the code is both added and activated. In fact, this might actually be a really good excuse for me to try out: https://docs.github.com/en/pull-requests/get-started/about-stacked-prs
My ETA is about 3 weeks
sounds fine, thanks!
Promise not to hate me. Here's a crazy thought. What if we'd create a Maven Submodule (as mentioned for API tests, too) and use a JUnit test to trigger running the Playwright tests? (Not asking to transform the tests from Node to Java here, just make them more accessible :wink: ) This might be a pipe dream around using https://github.com/eirslett/frontend-maven-plugin
I just left a lengthy review on #12783. Good job @Ash Manda! :heart: I do still have some more things for you... :grimacing: :see_no_evil:
It will take a long time to address some of those review comments
We cannot run JSF and API tests in parallel. Runners limits for free orgs is 20, we'd increase the number of parallel runners to 4. Dataverse frontend would suffer
Coveralls also doesn't support piecemeal XML reports. So we need to fold in your unit tests action into our workflow and generate a combined report.
There is a reason why I made the integration tests run three times, which is flaky tests. A lot of the time seeing an integration tests job fail, simply re-running it would get it to pass. If they run three times in parallel, say one passes and two fails, we know on the spot which test is flaky. That's a whole 40min re-run saved for developers. If all three fail, we know for sure that its not a flaky test
With GHCR uploads/downloads we are adding another point of failure into our workflow. GitHub artifact upload/download for our purposes here is "free". It costs 10 seconds up and down and it gives devs an easy download if they want to replicate the exact container setup.
Thank you for the detailed review! I'll share my thoughts there too
Anyone up for a campfire and a fireside chat in a cozy Zoom room to talk about this?
Raw notes from today's meeting. Very raw.
**Push to GHCR if secrets are available AFTER all the tests pass. Multi-arch image.
container_base_push.yml => we want to look Into ARM runners
We need to look into CodeQL parallelized runners running them sequentially
Phil, Oliver, Ash agree on unnecessary runners. Cut them down. Especially CodeQL
We want to decouple the API and JSF tests, before that CodeQL needs to go away. It is possibly replaced by SonarQube
**R1: Integration Tests
R2: Chrome -> R2: Firefox
-> R3: Webkit
All end at the same time
pom.xml <JaCoCo>
Take a JaCoCo report from each and merge them together:
-> Unit Tests
-> Integration Tests
-> API Tests
-> JSF Tests Chrome
-> JSF Tests Firefox
-> JSF Tests Webkit
maven_unit_test.yml does codecoverage
Code Coverage is out of scope for the current PR
Instead of mangling the JaCoCo agent, add a script to the base container to attach the JaCoCo agent.
Container base / modules /docker script / startinForeground.sh
compose.yml
Add more agents: Java Agents setting
Tell maven to fold the jacoco cli and agent images into the build file (maybe you donβt need the cli)
This is part of the scope for this PR
Maven Cache Management: Figure out NPM Caching
Playwright, Chromium, Firefox, and Webkit => Once theyβre merged into upstream.
NPM Cache
Future Optimization: Figure out how to use the maven cache more to reduce per-branch maven. Then look into npm caches
mvn verify by default runs mvn package BUT BUT BUT there are skip flags present to skip the packaging steps.
@Ash Manda you're supposed to be on vacation!
That's what I said!! :smile:
I am always on vacation! This is fun!
I addressed almost all of the concerns we had in today's meeting except for caching. Which we can't do anyways because the JSF tests aren't in the main repo
The way I'm planning to handle it is that I am also rewriting the JSF tests repository from TypeScript into Java. By the time we're ready to bring it in, it should be able to fold directly into upstream
Ah, I was wondering about that. Backend devs would probably prefer Java anyway. :smile:
Tests pass successfully in Java: https://github.com/uncch-rdmc/dataverse/actions/runs/38826031860/job/116733594566?pr=108
Okay so i have a problem
I translated the entire suite into Java yes. But it still uses the microsoft playwright library
WOWzers! That must have been a lot of work! ![]()
This library is known for "strongly" preferring Ubuntu. I don't know if it'll break anything if its added to the project. Its known for not playing very well on Fedora/RHEL
The project is live at: https://github.com/gdcc/dataverse-jsf-tests/tree/java
If we put the tests into a submodule, most people probably will never get in touch with them. Maybe that's fine then?
I was wondering if someone can help me understand the blast radius of folding this into the upstream repo
Sure. What would you need?
going through the pom.xml and seeing if any libraries would cause problems for developers?
playwright is definitely one
The whole point of this exercise is to let developers run tests freely right
If that library is the only one, I might try switching to Playwright in Containers
I can take a look. But as I said, by making it a submodule, this is a part of upstream, but not mixed into the Dataverse source tree.
That makes it alot less risky
I thought we wanted to make it part of the source tree?
In any case, thank you so much!
I would advise against that. Please note that the two of us never talked about this here before, so my opinion might be different to what @Philip Durbin π said / wants / needs. :see_no_evil:
I just want the JSF tests in the main "dataverse" git repo so that tests are versioned alongside the code.
submodule ain't gonna do that right?
My advice would be to put the code under modules/dataverse-jsf and make it a submodule to the parent as well as using the parent in the module.
Ah, I think I know where the confusion comes from!
I'm talking about a _Maven_ submodule, not a _Git_ submodule!
Maybe just modules/jsf?
Or modules/jsf-tests?
Or under tests/jsf. I thought that was the original plan. :smile:
Again, I'd advice against that. Looking at a lot of other Java projects, if you have more tests for another module, they mostly use the module name and add a suffix
I still have to give developers a way to run these tests locally on RHEL
I'm not sure what we're talking about. Getting lost.
my bad.
Little bit of context
The playwright tests are now in Java. Which is good
But playwright doesn't work well on RHEL. Only on Ubuntu. The maven package
right, moving from JS/TS to Java was a big change
Most of our developers use RHEL afaik
who uses RHEL?
Not for development. And I'm not most :sweat_smile:
The containers in our dev env are Ubuntu.
Don't they? I thought RHEL was the recommended dev platform?
No, deployment platform
yes, RHEL for prod
IQSS AFAIK uses Macs exclusively, I'm on Fedora.
right
Not sure about the other core team members Vera and Eryk (not tagging them for now)
I _think_ Jim uses Mac as well?
I'd still feel better if someone more knowledgable used AI to see if any of these modules will cause an issue: https://github.com/gdcc/dataverse-jsf-tests/blob/java/pom.xml
Eryk is on Linux. Jim is on Windows. Not sure about Vera.
I don't see anything other than Playwright
/me checks out the code now
we probably want to run these tests on a deployment platform too
As long as the tests are not tied into the core code in any way (via Maven), they won't hurt anything in the core code.
Say a QA or Test server with an RC
We already have a couple little Maven projects in the core code that aren't tied in.
(I think @Oliver Bertuch has argued that they should be tied in.) :sweat_smile:
once again thank you so much for taking time to help me through this!
oh sure
Instead of <groupId>edu.harvard.iq</groupId> should we use org.dataverse? :thinking:
I agree we should use profiles per browser. The profile should keep the execution config, making the "skip" flags obsolete.
@Oliver Bertuch is your vision for this that devs run something like mvn test:jsf from the root of the repo?
Or will they cd tests/jsf first and run whatever mvn command?
Either cd modules/dataverse-jsf; mvn verify ... or mvn -f modules/dataverse-jsf verify ...
Normal Maven stuff
Just like any other submodule :sweat_smile:
If you have any reviews for that repo, they're always welcome! It's best to make changes right now
Ok, so a maven submodule. Tied in. Not a separate Maven project on the side that happens to be in the same git repo.
Why call it "dataverse-jsf" and not just "jsf-tests"? Why is "dataverse" in there? :thinking:
I wanted to separate it from the other JSF tests that I work on specifically for UNC.
Philip Durbin π said:
Why call it "dataverse-jsf" and not just "jsf-tests"? Why is "dataverse" in there? :thinking:
:point_down:
Oliver Bertuch said:
Again, I'd advice against that. Looking at a lot of other Java projects, if you have more tests for another module, they mostly use the module name and add a suffix
Is this where we define the module name as "dataverse"? https://github.com/IQSS/dataverse/blob/v6.12.1/pom.xml#L17
Aye!
ok, thanks
It would be so nice to have a proper parent/child layout in our repo... :see_no_evil: Maybe in DV 10?
ha, maybe
Can we change it from edu.harvard.iq to org.dataverse then too?!?
sure, I have no problem
No one would stop us. We don't have to change the package folders when relocating the groupId, but we should to be aligned with good practices of Maven.
in Dataverse 10, I mean :smile:
These days, something like this should be fairly transparent anyway. Moving the file in Git without touching the package name makes sure the past history is still available in Git blame.
But this is OT. Sry!
we have git subtree for that
yeah, get a topic, get a room! :smile:
Why is there a Maven Exec Plugin involved? Shouldn't a JUnit test with @UsePlaywright annotation suffice?
I take it much of this is AI generated? The structure of it all is a bit on the wild side.
Correction, ALL of it is AI generated
There is no way I could've rewritten an entire JavaScript test suite in Java in a few hours
yeah, I would use AI for that :smile:
My way of analyzing tests is seeing code deduplication and videos
if you would prefer structural changes, I'm more than happy to make them!
This applies to #12783 too
I am not very strongly opinionated about how things should be done
If you take a look at the current JSF and API test workflows, you would realize that they're complete garbage: https://github.com/IQSS/dataverse/blob/develop/.github/workflows/container_integration_tests.yml
https://github.com/IQSS/dataverse/blob/develop/.github/workflows/dataverse_jsf_tests.yml
But, its garbage that let us turn off Jenkins quickly!
Last updated: Nov 02 2026 at 07:01 UTC