Skip to content

GitHub ci extend#3842

Open
jacomago wants to merge 9 commits into
ControlSystemStudio:masterfrom
jacomago:github-ci-extend
Open

GitHub ci extend#3842
jacomago wants to merge 9 commits into
ControlSystemStudio:masterfrom
jacomago:github-ci-extend

Conversation

@jacomago

Copy link
Copy Markdown
Contributor

Add testing to github ci.

  • Refactor the ci to be per type of action
  • Add reusable sub workflows, unit-test, integration-test, ui-test, etc
  • Rename JavaFX tests (they fail unless access to some kind of ui) have them run with ui-tests workflow
  • Remove some unnecessary relying on Elasticsearch Config for some integration tests in save and restore
  • Add dependabot for the github actions (could be expanded for the pom.xml)
  • Remove the dead travis ci (was tied to a very old version of ubuntu)

Open questions:

  • Add dependabot for pom.xml?
  • Remove 'tests were run from PR template?

Checklist

  • Testing:

    • [ x] The feature has automated tests
    • [x ] Tests were run
    • If not, explain how you tested your changes
  • Documentation:

    • The feature is documented
    • The documentation is up to date
    • Release notes:
      • Added an entry if the change is breaking or significant
      • Added an entry when adding a new feature

jacomago and others added 8 commits June 18, 2026 15:26
Travis ran on years-EOL Ubuntu xenial and was effectively dead. Its headless
TestFX MAVEN_OPTS (xvfb + glass robot + software prism) are ported into the
new _test.yml reusable workflow.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Replace the old build.yml / build_latest.yml / four *-docker-image.yml setup
with reusable workflows invoked by thin, event-specific callers:

Reusable (workflow_call):
- _build, _test (unit + TestFX UI under xvfb), _integration-test
  (Elasticsearch service container), _docker-image (build + publish to ghcr).

Event callers:
- branch.yml  (push, non-master): fast build-only compile check.
- pr.yml      (pull_request): build gate -> test + integration-test; covers
              same-repo and fork PRs read-only (plain pull_request, no secrets).
- merge.yml   (push master): cross-platform matrix build + test +
              integration-test, and publishes images for changed services
              (native git-diff detection).
- release.yml (push tag): publishes all service images.
- report.yml  (workflow_run): publishes JUnit results as a check in the
              base-repo context, so fork PRs get a check too.

Tests run as a required gate: a failure fails the job.

Also repoint the README CI status badge at merge.yml; the build.yml it
referenced is removed here.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Add Dependabot (github-actions ecosystem) to auto-PR action-version bumps, and
update CI_VERSIONS.md

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The *UI TestFX tests still extended the JUnit 4 base
org.testfx.framework.junit.ApplicationTest while their @test methods were
migrated to JUnit Jupiter (commit 9f87c08). Under the Jupiter engine the
JUnit 4 lifecycle that invokes start(Stage) never runs, so the scene-graph
fields are null and every test NPEs. They had been dormant since they were
renamed to be skipped in CI; _test.yml's ui-tests profile re-enables them.

Switch to the JUnit 5 TestFX base (org.testfx.framework.junit5.ApplicationTest)
and align testfx to 4.0.18, matching app/email/ui. No other test changes.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…to UI fork

CI test-gate fixes for the new integration-test and ui-test jobs.

integration-test: two problems kept the save-and-restore Elasticsearch-backed
*IT tests from passing.

  - -Dspring.profiles.active=IT was forced on the whole reactor, including the
    surefire unit-test phase, which excluded the @Profile("!IT") mock configs and
    broke ~142 save-and-restore unit tests (NoSuchBeanDefinitionException:
    NodeDAO). Move the IT profile onto the failsafe *IT fork only via
    systemPropertyVariables in the module pom, drop the global -D so surefire keeps
    the default (mock) profile, and build just the save-and-restore module and its
    deps (-pl services/save-and-restore -am) so the job runs only the
    Elasticsearch-backed *IT tests.

  - The executable-jar profile's spring-boot:repackage runs at package and
    replaces the module's main artifact with a fat jar (classes relocated under
    BOOT-INF/classes/). Failsafe then ran against that repackaged artifact and
    couldn't resolve the flat main classes the in-process @SpringBootTest ITs
    field-inject (NoClassDefFoundError on ConfigurationDataRepository,
    ElasticsearchTreeRepository, ComparisonController). Pass -Dskip-executable-jar
    to deactivate the !skip-executable-jar profile so repackage is skipped and the
    thin jar stays as the main artifact; the executable jar is built separately by
    the docker-image job.

ui-tests (TestFX): the headless/testfx/prism properties were only in MAVEN_OPTS,
which reaches the launching Maven JVM but not the forked failsafe JVM, so
ListSelectionUI's java.awt.headless skip guard never fired (its leaked modal
dialog also broke DockPaneTestUI.TestContextMenu). Set them as failsafe
systemPropertyVariables in the ui-tests profile so the guard works and the dock
tests drive a glass robot under xvfb.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…at-end

Previously a single _test.yml job ran unit (surefire) and TestFX UI (failsafe
*UI) tests together, and the fail-fast reactor skipped every later module once
one module's tests failed.

- Add _unit-test.yml: surefire tests across the reactor with --fail-at-end, so
  every independent module is tested even when another fails.
- Add _ui-test.yml: the *UI TestFX tests only, under xvfb. The ui-tests profile
  now skips surefire (plugin-config level, so failsafe still runs), making
  -P ui-tests mean 'UI tests only'.
- Rewire pr.yml and merge.yml to call both reusable workflows; remove _test.yml.
- report.yml already globs *test-reports, so it picks up the unit-test-reports,
  ui-test-reports and integration-test-reports artifacts.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Some unit tests (e.g. those using javafx.scene.paint.Color) require the
JavaFX toolkit to be initialized, which fails in a pure headless
environment without xvfb or specific prism properties.

- Rename 11 unit tests that import javafx.* to *FXTest.java.
- Exclude **/*FXTest.java from the default surefire execution in pom.xml.
- Include **/*FXTest.java in the ui-tests and all-tests profiles via failsafe.
- Remove xvfb-run and graphics properties from _unit-test.yml, making it
  a truly headless job.
- These *FXTest tests will now run in the _ui-test.yml job under xvfb.

Co-Authored-By: Gemini-Cli <218195315+gemini-cli@users.noreply.github.com>
The save-and-restore *IT tests were failing with index_not_found_exception
on subsequent tests because they manually dropped indices in @afterall.

Because these integration tests run in the same JVM and use a cached Spring
context, ElasticConfig (which guards index creation with a static final
AtomicBoolean) does not reinitialize the mappings. Dropping the schema
leaves the subsequent tests without indices.

- Remove dropIndex() and dropIndices() from @afterall in DAOTestIT,
  ConfigurationDataRepositoryTestIT, and ElasticsearchTreeRepositoryTestIT.
- The tests already clear the data between runs (e.g. via clearAllData()
  in DAOTestIT) which correctly deletes the document records and leaves the
  empty index schema intact for the next test.
- Fix @WebMvcTest in ComparisonControllerTest to correctly target
  ComparisonController.class.

Co-Authored-By: Gemini-Cli <218195315+gemini-cli@users.noreply.github.com>
@jacomago jacomago self-assigned this Jun 18, 2026
@shroffk

shroffk commented Jun 18, 2026

Copy link
Copy Markdown
Member

This looks broadly nice

I wish this had happened before I was cleaning them up for jdk 25 :)

…I tests

When multiple TestFX test classes are run in the same Maven Failsafe execution,
each test class attempts to initialize the JavaFX toolkit. Since the JavaFX
application thread can only be launched once per JVM, subsequent test classes
fail during setup.

Added `<reuseForks>false</reuseForks>` to the `maven-failsafe-plugin` configuration
under the `ui-tests` profile. This tells Failsafe to spawn a fresh, isolated JVM
for each test class, avoiding the single-launch limitation of JavaFX and ensuring
a clean test environment.

Co-Authored-By: Gemini-Cli <218195315+gemini-cli@users.noreply.github.com>
@sonarqubecloud

Copy link
Copy Markdown

@ralphlange

Copy link
Copy Markdown
Collaborator

I am impressed.

@minijackson

Copy link
Copy Markdown
Contributor

I'm not personally a fan of having to review big changes, especially AI-assisted. GitHub actions are something that's quite easy to get wrong in very subtle, and insecure ways.

I can't review everything that this PR does, so I've run the tool zizmor to audit some common issues with GitHub actions. Here's some of the most important ones (see the linked audit rules for a more complete explanation):

  • It's recommended to pin the hash of every use of an external action, to prevent supply chain attacks through actions

  • In the same way, it's recommended to pin the hash of used Docker images

  • It's recommended to set important / write permissions at the jobs level, instead of at the workflow level

  • When using user-controlled strings inside commands, it's recommended to go through and environment variable to prevent command injection, for example by using:

        - name: Build with Maven
          run: mvn --batch-mode ${INPUTS_MAVEN_ARGS}
          env:
            INPUTS_MAVEN_ARGS: ${{ inputs.maven-args }}
  • It's recommended to set a cooldown setting to the Dependabot upgrade

  • Zizmor categorises the workflow_run trigger as fundamentally insecure, as they allow running unreviewed user-controlled code from forks in the context of the target repository (including configured secrets and permissions)

But there's more, here's the complete output of zizmor --persona auditor .github on my machine:

zizmor output
error[unpinned-uses]: unpinned action reference
  --> .github/actions/setup-java/action.yml:10:13
   |
10 |     - uses: actions/setup-java@v5
   |             ^^^^^^^^^^^^^^^^^^^^^ action is not pinned to a hash (required by blanket policy)
   |
   = note: audit confidence → High
   = help: audit documentation → https://docs.zizmor.sh/audits/#unpinned-uses

warning[dependabot-cooldown]: insufficient cooldown in Dependabot updates
 --> .github/dependabot.yml:6:5
  |
6 |   - package-ecosystem: github-actions
  |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ missing cooldown configuration
  |
  = note: audit confidence → High
  = note: this finding has an auto-fix
  = help: audit documentation → https://docs.zizmor.sh/audits/#dependabot-cooldown

help[artipacked]: credential persistence through GitHub Actions artifacts
  --> .github/workflows/_build.yml:22:7
   |
22 |     - uses: actions/checkout@v6
   |       ^^^^^^^^^^^^^^^^^^^^^^^^^ does not set persist-credentials: false
   |
   = note: audit confidence → Low
   = note: this finding has an auto-fix
   = help: audit documentation → https://docs.zizmor.sh/audits/#artipacked

error[unpinned-uses]: unpinned action reference
  --> .github/workflows/_build.yml:22:13
   |
22 |     - uses: actions/checkout@v6
   |             ^^^^^^^^^^^^^^^^^^^ action is not pinned to a hash (required by blanket policy)
   |
   = note: audit confidence → High
   = help: audit documentation → https://docs.zizmor.sh/audits/#unpinned-uses

error[unpinned-uses]: unpinned action reference
  --> .github/workflows/_build.yml:29:13
   |
29 |       uses: actions/upload-artifact@v7
   |             ^^^^^^^^^^^^^^^^^^^^^^^^^^ action is not pinned to a hash (required by blanket policy)
   |
   = note: audit confidence → High
   = help: audit documentation → https://docs.zizmor.sh/audits/#unpinned-uses

info[anonymous-definition]: workflow or action definition without a name
  --> .github/workflows/_build.yml:19:3
   |
19 |   build:
   |   ^^^^^ this job
   |
   = note: audit confidence → High
   = tip: use 'name: ...' to give this job a name
   = help: audit documentation → https://docs.zizmor.sh/audits/#anonymous-definition

help[artipacked]: credential persistence through GitHub Actions artifacts
  --> .github/workflows/_docker-image.yml:27:7
   |
27 |     - uses: actions/checkout@v6
   |       ^^^^^^^^^^^^^^^^^^^^^^^^^ does not set persist-credentials: false
   |
   = note: audit confidence → Low
   = note: this finding has an auto-fix
   = help: audit documentation → https://docs.zizmor.sh/audits/#artipacked

error[excessive-permissions]: overly broad permissions
  --> .github/workflows/_docker-image.yml:21:3
   |
21 |   packages: write
   |   ^^^^^^^^^^^^^^^ packages: write is overly broad at the workflow level
   |
   = note: audit confidence → High
   = help: audit documentation → https://docs.zizmor.sh/audits/#excessive-permissions

error[template-injection]: code injection via template expansion
  --> .github/workflows/_docker-image.yml:31:33
   |
31 |       run: mvn --batch-mode ${{ inputs.maven-args }}
   |       --- this run block        ^^^^^^^^^^^^^^^^^ may expand into attacker-controllable code
   |
   = note: audit confidence → High
   = note: this finding has an auto-fix
   = help: audit documentation → https://docs.zizmor.sh/audits/#template-injection

error[unpinned-uses]: unpinned action reference
  --> .github/workflows/_docker-image.yml:27:13
   |
27 |     - uses: actions/checkout@v6
   |             ^^^^^^^^^^^^^^^^^^^ action is not pinned to a hash (required by blanket policy)
   |
   = note: audit confidence → High
   = help: audit documentation → https://docs.zizmor.sh/audits/#unpinned-uses

error[unpinned-uses]: unpinned action reference
  --> .github/workflows/_docker-image.yml:33:13
   |
33 |       uses: docker/login-action@v4
   |             ^^^^^^^^^^^^^^^^^^^^^^ action is not pinned to a hash (required by blanket policy)
   |
   = note: audit confidence → High
   = help: audit documentation → https://docs.zizmor.sh/audits/#unpinned-uses

error[unpinned-uses]: unpinned action reference
  --> .github/workflows/_docker-image.yml:40:13
   |
40 |       uses: docker/metadata-action@v6
   |             ^^^^^^^^^^^^^^^^^^^^^^^^^ action is not pinned to a hash (required by blanket policy)
   |
   = note: audit confidence → High
   = help: audit documentation → https://docs.zizmor.sh/audits/#unpinned-uses

error[unpinned-uses]: unpinned action reference
  --> .github/workflows/_docker-image.yml:44:13
   |
44 |       uses: docker/setup-buildx-action@v4
   |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ action is not pinned to a hash (required by blanket policy)
   |
   = note: audit confidence → High
   = help: audit documentation → https://docs.zizmor.sh/audits/#unpinned-uses

error[unpinned-uses]: unpinned action reference
  --> .github/workflows/_docker-image.yml:46:13
   |
46 |       uses: docker/build-push-action@v7
   |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^ action is not pinned to a hash (required by blanket policy)
   |
   = note: audit confidence → High
   = help: audit documentation → https://docs.zizmor.sh/audits/#unpinned-uses

help[undocumented-permissions]: permissions without explanatory comments
  --> .github/workflows/_docker-image.yml:21:3
   |
21 |   packages: write
   |   ^^^^^^^^^^^^^^^ needs an explanatory comment
   |
   = note: audit confidence → High
   = help: audit documentation → https://docs.zizmor.sh/audits/#undocumented-permissions

info[anonymous-definition]: workflow or action definition without a name
  --> .github/workflows/_docker-image.yml:24:3
   |
24 |   build-and-push-image:
   |   ^^^^^^^^^^^^^^^^^^^^ this job
   |
   = note: audit confidence → High
   = tip: use 'name: ...' to give this job a name
   = help: audit documentation → https://docs.zizmor.sh/audits/#anonymous-definition

help[artipacked]: credential persistence through GitHub Actions artifacts
  --> .github/workflows/_integration-test.yml:27:7
   |
27 |     - uses: actions/checkout@v6
   |       ^^^^^^^^^^^^^^^^^^^^^^^^^ does not set persist-credentials: false
   |
   = note: audit confidence → Low
   = note: this finding has an auto-fix
   = help: audit documentation → https://docs.zizmor.sh/audits/#artipacked

error[unpinned-uses]: unpinned action reference
  --> .github/workflows/_integration-test.yml:27:13
   |
27 |     - uses: actions/checkout@v6
   |             ^^^^^^^^^^^^^^^^^^^ action is not pinned to a hash (required by blanket policy)
   |
   = note: audit confidence → High
   = help: audit documentation → https://docs.zizmor.sh/audits/#unpinned-uses

error[unpinned-uses]: unpinned action reference
  --> .github/workflows/_integration-test.yml:36:13
   |
36 |       uses: actions/upload-artifact@v7
   |             ^^^^^^^^^^^^^^^^^^^^^^^^^^ action is not pinned to a hash (required by blanket policy)
   |
   = note: audit confidence → High
   = help: audit documentation → https://docs.zizmor.sh/audits/#unpinned-uses

error[unpinned-images]: unpinned image references
  --> .github/workflows/_integration-test.yml:15:9
   |
15 |         image: docker.elastic.co/elasticsearch/elasticsearch:8.11.2
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ container image is not pinned to a SHA256 hash
   |
   = note: audit confidence → High
   = help: audit documentation → https://docs.zizmor.sh/audits/#unpinned-images

info[anonymous-definition]: workflow or action definition without a name
  --> .github/workflows/_integration-test.yml:10:3
   |
10 |   integration-test:
   |   ^^^^^^^^^^^^^^^^ this job
   |
   = note: audit confidence → High
   = tip: use 'name: ...' to give this job a name
   = help: audit documentation → https://docs.zizmor.sh/audits/#anonymous-definition

help[artipacked]: credential persistence through GitHub Actions artifacts
  --> .github/workflows/_ui-test.yml:13:7
   |
13 |     - uses: actions/checkout@v6
   |       ^^^^^^^^^^^^^^^^^^^^^^^^^ does not set persist-credentials: false
   |
   = note: audit confidence → Low
   = note: this finding has an auto-fix
   = help: audit documentation → https://docs.zizmor.sh/audits/#artipacked

error[unpinned-uses]: unpinned action reference
  --> .github/workflows/_ui-test.yml:13:13
   |
13 |     - uses: actions/checkout@v6
   |             ^^^^^^^^^^^^^^^^^^^ action is not pinned to a hash (required by blanket policy)
   |
   = note: audit confidence → High
   = help: audit documentation → https://docs.zizmor.sh/audits/#unpinned-uses

error[unpinned-uses]: unpinned action reference
  --> .github/workflows/_ui-test.yml:25:13
   |
25 |       uses: actions/upload-artifact@v7
   |             ^^^^^^^^^^^^^^^^^^^^^^^^^^ action is not pinned to a hash (required by blanket policy)
   |
   = note: audit confidence → High
   = help: audit documentation → https://docs.zizmor.sh/audits/#unpinned-uses

info[anonymous-definition]: workflow or action definition without a name
  --> .github/workflows/_ui-test.yml:10:3
   |
10 |   ui-test:
   |   ^^^^^^^ this job
   |
   = note: audit confidence → High
   = tip: use 'name: ...' to give this job a name
   = help: audit documentation → https://docs.zizmor.sh/audits/#anonymous-definition

help[artipacked]: credential persistence through GitHub Actions artifacts
  --> .github/workflows/_unit-test.yml:13:7
   |
13 |     - uses: actions/checkout@v6
   |       ^^^^^^^^^^^^^^^^^^^^^^^^^ does not set persist-credentials: false
   |
   = note: audit confidence → Low
   = note: this finding has an auto-fix
   = help: audit documentation → https://docs.zizmor.sh/audits/#artipacked

error[unpinned-uses]: unpinned action reference
  --> .github/workflows/_unit-test.yml:13:13
   |
13 |     - uses: actions/checkout@v6
   |             ^^^^^^^^^^^^^^^^^^^ action is not pinned to a hash (required by blanket policy)
   |
   = note: audit confidence → High
   = help: audit documentation → https://docs.zizmor.sh/audits/#unpinned-uses

error[unpinned-uses]: unpinned action reference
  --> .github/workflows/_unit-test.yml:19:13
   |
19 |       uses: actions/upload-artifact@v7
   |             ^^^^^^^^^^^^^^^^^^^^^^^^^^ action is not pinned to a hash (required by blanket policy)
   |
   = note: audit confidence → High
   = help: audit documentation → https://docs.zizmor.sh/audits/#unpinned-uses

info[anonymous-definition]: workflow or action definition without a name
  --> .github/workflows/_unit-test.yml:10:3
   |
10 |   unit-test:
   |   ^^^^^^^^^ this job
   |
   = note: audit confidence → High
   = tip: use 'name: ...' to give this job a name
   = help: audit documentation → https://docs.zizmor.sh/audits/#anonymous-definition

help[undocumented-permissions]: permissions without explanatory comments
  --> .github/workflows/merge.yml:31:7
   |
31 |       packages: write
   |       ^^^^^^^^^^^^^^^ needs an explanatory comment
   |
   = note: audit confidence → High
   = help: audit documentation → https://docs.zizmor.sh/audits/#undocumented-permissions

help[undocumented-permissions]: permissions without explanatory comments
  --> .github/workflows/release.yml:15:7
   |
15 |       packages: write
   |       ^^^^^^^^^^^^^^^ needs an explanatory comment
   |
   = note: audit confidence → High
   = help: audit documentation → https://docs.zizmor.sh/audits/#undocumented-permissions

warning[excessive-permissions]: overly broad permissions
  --> .github/workflows/report.yml:14:3
   |
14 |   checks: write
   |   ^^^^^^^^^^^^^ checks: write is overly broad at the workflow level
   |
   = note: audit confidence → High
   = help: audit documentation → https://docs.zizmor.sh/audits/#excessive-permissions

error[excessive-permissions]: overly broad permissions
  --> .github/workflows/report.yml:15:3
   |
15 |   pull-requests: write
   |   ^^^^^^^^^^^^^^^^^^^^ pull-requests: write is overly broad at the workflow level
   |
   = note: audit confidence → High
   = help: audit documentation → https://docs.zizmor.sh/audits/#excessive-permissions

error[dangerous-triggers]: use of fundamentally insecure workflow trigger
 --> .github/workflows/report.yml:3:1
  |
3 | / on:
4 | |   workflow_run:
5 | |     workflows:
6 | |       - PR
7 | |       - Merge to master
8 | |     types:
9 | |       - completed
  | |_________________^ workflow_run is almost always used insecurely
  |
  = note: audit confidence → Medium
  = help: audit documentation → https://docs.zizmor.sh/audits/#dangerous-triggers

error[unpinned-uses]: unpinned action reference
  --> .github/workflows/report.yml:22:13
   |
22 |       uses: actions/download-artifact@v7
   |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ action is not pinned to a hash (required by blanket policy)
   |
   = note: audit confidence → High
   = help: audit documentation → https://docs.zizmor.sh/audits/#unpinned-uses

error[unpinned-uses]: unpinned action reference
  --> .github/workflows/report.yml:28:13
   |
28 |       uses: mikepenz/action-junit-report@v6
   |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ action is not pinned to a hash (required by blanket policy)
   |
   = note: audit confidence → High
   = help: audit documentation → https://docs.zizmor.sh/audits/#unpinned-uses

help[undocumented-permissions]: permissions without explanatory comments
  --> .github/workflows/report.yml:13:3
   |
13 |   actions: read
   |   ^^^^^^^^^^^^^ needs an explanatory comment
14 |   checks: write
   |   ^^^^^^^^^^^^^ needs an explanatory comment
15 |   pull-requests: write
   |   ^^^^^^^^^^^^^^^^^^^^ needs an explanatory comment
   |
   = note: audit confidence → High
   = help: audit documentation → https://docs.zizmor.sh/audits/#undocumented-permissions

info[anonymous-definition]: workflow or action definition without a name
  --> .github/workflows/report.yml:18:3
   |
18 |   report:
   |   ^^^^^^ this job
   |
   = note: audit confidence → High
   = tip: use 'name: ...' to give this job a name
   = help: audit documentation → https://docs.zizmor.sh/audits/#anonymous-definition

help[concurrency-limits]: insufficient job-level concurrency limits
  --> .github/workflows/report.yml:3:1
   |
 3 | / on:
 4 | |   workflow_run:
 5 | |     workflows:
 6 | |       - PR
 7 | |       - Merge to master
 8 | |     types:
 9 | |       - completed
   | |_________________^ workflow is missing concurrency setting
...
18 |     report:
   |     ------ job affected by missing workflow concurrency
   |
   = note: audit confidence → High
   = help: audit documentation → https://docs.zizmor.sh/audits/#concurrency-limits

39 findings (1 safe fixes, 6 unsafe fixes): 6 informational, 10 low, 2 medium, 21 high

I recommend setting up the zizmor action so that those kind of issues are catched when modifying those jobs.

In the EPNix repository "Actions" settings, I've also restricted which actions can run, to limit which transitive action dependencies can be run in our CI

@jacomago

Copy link
Copy Markdown
Contributor Author

Zizmor looks pretty cool. I'll fix all the warnings on Monday, unless someone wants to take over.

@ralphlange

Copy link
Copy Markdown
Collaborator

https://depmedicdev-byte.github.io/compare/ci-doctor-vs-zizmor.html

The workflow - running zizmor and ci-doctor side-by-side - looks pretty usable.

@shroffk shroffk mentioned this pull request Jun 18, 2026
6 tasks
@shroffk

shroffk commented Jun 18, 2026

Copy link
Copy Markdown
Member

to prevent this PR from becoming any bigger, added zizmor in a separate PR #3843

@kasemir kasemir left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Source changes look benign. Can't comment on the GitHub actions

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants