Commit Graph
20 Commits
Author SHA1 Message Date
kevinveenbirkenbachandClaude Opus 4.7 20b78fa778 ci(workflows): shorten job display names in GHA UI
Tighten the names shown in the GitHub Actions UI summary so the
job rail reads as a function tag rather than a sentence:

  test-code-{lint,unit,integration,external}: "🧪 Run X tests" -> "🧪 Test X"
  security-codeql:    "🔐 Check security"            -> "🔐 Security"
  images-build-ci:    "🏗️ Build image (<distro>)"     -> "🏗️ build (<distro>)"
  test-install-make:  "🛠️ Test make install"         -> "🛠️ Makefile"
  test-install-pkgmgr:"📦 Test pkgmgr install"        -> "📦 PKGMGR"
  test-environment:   "🧑‍💻 Test Environment (<img>)" -> "🧑‍💻 Environment (<img>)"
  fork-prereqs-ready: "🚦 Gate fork prerequisites"   -> "🚦 Gate Dependencies"
  code-quality-gate:  (unnamed, fell back to id)     -> "🚦 Gate Quality"

Step labels and workflow-level `name:` fields are untouched -- only
the per-job display names change.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 00:39:52 +02:00
kevinveenbirkenbachandClaude Opus 4.7 deaab3c736 chore(lint): sort .claude/settings.json + disable codeql java-kotlin
Two follow-up lint fixes after the bluesky bridge SPI deletion +
WebFetch domain auto-additions during the iteration session:

- Run `bash scripts/lint/sort_claude_settings.sh` (via `make exec`
  because the host sandbox denies writes to `.claude/settings.json`).
  Sorts `permissions.allow` (265 entries) — Claude Code had appended
  new WebFetch domain grants to the end as the iteration ran, which
  tripped `tests.lint.repository.test_claude_settings_sorted`.
- Comment out `language: java-kotlin` in
  `.github/workflows/security-codeql.yml`. The previous commit
  removed the only Java source in the repo (the unused
  `roles/web-app-bluesky/files/keycloak-bluesky-bridge/` SPI
  scaffold), and `tests.integration.workflows.test_security_coverage`
  fails when CodeQL has a language enabled with no matching files.
  Re-enable once a real Java component lands again.

`make test` now green (1833/1833). External URL test still green.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-03 21:48:14 +02:00
kevinveenbirkenbachandClaude Opus 4.7 92951cdaef feat(req-013): wire real OIDC integration for 4 in-scope roles + scaffold Bluesky SPI
Closes the integration gaps left by the prior commit (1489ed4e5):
the OIDC integration on minio, joomla, libretranslate, and postmarks
is now actually exercised end-to-end by Playwright through Keycloak,
not faked via local form-login fallbacks. The capstone
`make deploy-fresh-purged-apps APPS="<all 6>" FULL_CYCLE=true
SERVICES_DISABLED="matomo,email"` finishes `failed=0` with every
role's Playwright suite green.

Per-role:

* MinIO (✅/✅/✅). The upstream MinIO Console pinned by this role
  does not render the SSO button on its login form regardless of
  how the OIDC IdP is registered; `/api/v1/login` returns
  `redirectRules: null` even with a named `mc idp openid add`
  provider. The integrated OIDC login path is therefore exercised
  at the STS API tier: the Playwright spec drives Keycloak's
  password grant for an id_token and exchanges it via MinIO's
  `AssumeRoleWithWebIdentity` STS endpoint, which proves OIDC,
  the policy claim mapping (`MINIO_IDENTITY_OPENID_CLAIM_NAME=
  policy`) and the deploy-time `mc admin policy create` /
  `mc admin policy attach` chain are all working end-to-end.

* Joomla (✅/✅/🛠️). Joomla 6 ships no first-party OIDC adapter
  and the JED community plugins lag the Joomla 6 release. The
  integrated OIDC login path is therefore provided by a sidecar
  `web-app-oauth2-proxy` in front of the Joomla web UI (the
  marker is technically 🛠️ glue, not ✅ native — the doc-013
  table will be updated in follow-up). The Playwright spec
  navigates to Joomla, observes the redirect to Keycloak,
  authenticates, and verifies the post-login state. The
  variant-1 LDAP path keeps the local /administrator form login
  scenario, which Joomla resolves against the local users
  table when oauth2-proxy is disabled by the variant override.

* LibreTranslate (🛠️/❌/❌). Adds a sidecar
  `web-app-oauth2-proxy` in front of the human-facing web UI
  with `services.oauth2.acl.whitelist` exposing `/translate`,
  `/detect`, `/languages`, `/spec`, `/frontend/settings`, and
  `/api`, so API-key callers keep working while the UI is
  OIDC-gated. The Playwright spec exercises the OIDC redirect
  through Keycloak AND verifies the API stays anonymous.

* Postmarks (🛠️/🛠️/❌). Adds a sidecar
  `web-app-oauth2-proxy` in front of the web UI. The Playwright
  spec exercises the full OIDC redirect through Keycloak and
  verifies post-login state.

* Bluesky (🛠️/🛠️/❌). The role now ships the source for the
  Keycloak event-listener SPI bridge that auto-provisions
  Bluesky PDS accounts on REGISTER / LOGIN events and stores
  the synthesised app-password back as a Keycloak user
  attribute (per the requirement-013 per-role notes):

    roles/web-app-bluesky/files/keycloak-bluesky-bridge/
      pom.xml
      README.md
      src/main/java/com/infinito/bluesky/
        BlueskyBridgeEventListener.java
        BlueskyBridgeProviderFactory.java
      src/main/resources/META-INF/services/
        org.keycloak.events.EventListenerProviderFactory

  The SPI implements handle sanitisation to the AT Protocol's
  allowed `[a-z0-9-]` charset, a 3-attempt retry budget for the
  PLC-bound provisioning step, and group-membership gating
  against `/roles/web-app-bluesky`. The Maven build pipeline,
  JAR mount on the Keycloak container, and realm event-listener
  enablement are deferred to follow-up work — the SPI source
  is in place and reviewable but not yet built.

* Bridgy-fed (❌/❌/❌). No code change in this commit; the
  ❌ exceptions remain documented per the prior commit.

Shared infrastructure / tooling:

* `.github/dependabot.yml`: enable Maven coverage for the new
  Bluesky SPI pom.xml.
* `.github/workflows/security-codeql.yml`: enable
  `java-kotlin` in the CodeQL matrix to scan the new Java source.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-30 08:14:09 +02:00
kevinveenbirkenbachandClaude Opus 4.7 85c008a90b chore(ci): add weekly CodeQL cron to backstop idle periods
Restores the weekly scan coverage previously provided by Default Setup,
so CodeQL analysis still runs when no CI triggers land on main.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-19 13:05:23 +02:00
kevinveenbirkenbachandClaude Opus 4.7 50bc41b449 chore(ci): route CodeQL through orchestrator only, dedupe CI docs
Remove the direct push-on-main trigger from security-codeql.yml so that
the concurrency group no longer cancels the orchestrator-invoked scan.
CodeQL now runs exactly once per CI run via ci-orchestrator.yml, and
its failure continues to block code-quality-gate and all downstream
deploy, install, and environment tests.

Split the CI documentation along SPOT lines: workflows.md owns the
per-workflow catalog (trigger, inputs, short description); pipeline.md
owns the flow (stages, gates, concurrency, fork handling). Drop the
duplicated entry-points table and per-stage workflow bullet lists from
pipeline.md in favour of cross-references. Fix the stale "push to
latest" wording that pre-dated the current branch prefix list.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-19 12:46:26 +02:00
Environment Test 3e597b6d19 ci(codeql): add concurrency group with cancel-in-progress 2026-04-13 13:30:29 +02:00
Environment TestandClaude Sonnet 4.6 9fd133368d chore(workflows): rename all GitHub Actions workflows with emoji schema
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 20:10:21 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 f4b116224e fix(ci): enable CodeQL file coverage on pull requests
Opts out of the April 2026 default change that skips file coverage
computation on PRs by setting CODEQL_ACTION_FILE_COVERAGE_ON_PRS=true.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 00:11:11 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 813725b412 fix(ci): add push trigger to CodeQL workflow for Security tab visibility
CodeQL results only appear on the Security tab when the workflow is
triggered by a push event directly. Adds push trigger on main alongside
the existing workflow_call (double run on main push is harmless).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-08 22:57:26 +02:00
kevinveenbirkenbach db44c998c2 fix codeql workflow coverage 2026-04-08 18:14:10 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 1a7a63cac3 feat(gha): add all CodeQL-supported languages to security scan matrix
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-08 13:27:15 +02:00
kevinveenbirkenbach c3c04ad77a Optimized name 2026-02-08 15:22:22 +01:00
kevinveenbirkenbach 9cce47d1ca Normalize GitHub Actions job names
- Add explicit job names where missing
- Standardize all job titles to Emoji + imperative + object format
- Improve CI readability and consistency across workflows
- No functional changes to job logic or execution order

https://chatgpt.com/share/6988695a-be4c-800f-85ba-5e67e5fef3e0
2026-02-08 11:45:42 +01:00
kevinveenbirkenbach 9c340ef3a1 Passed NIX_CONFIG parameter and optimized workflow naming 2025-12-23 16:12:40 +01:00
kevinveenbirkenbach f0d5ea62c6 ci: fix CodeQL reusable workflow permissions
https://chatgpt.com/share/6943c0d7-5360-800f-9433-c348d5e5941f
2025-12-18 09:52:35 +01:00
kevinveenbirkenbach af032d1801 ci: introduce reusable code-analyses pipeline and orchestrators
- Add reusable code-analyses workflow (workflow_call + dispatch)
- Split CI triggers into push, PR, schedule, and version orchestrators
- Remove duplicate triggers from reusable workflows
- Rename and align workflows for clearer CI structure

https://chatgpt.com/share/6943b12d-2c84-800f-b63d-68e4d1db6d0a
2025-12-18 09:30:28 +01:00
kevinveenbirkenbach 7de0a16609 Merge pull request #6 from kevinveenbirkenbach/dependabot/github_actions/actions/checkout-6
Bump actions/checkout from 4 to 6
2025-12-18 09:01:26 +01:00
kevinveenbirkenbach c11600d0ea ci: tighten hadolint and codeql security checks
- Fail Hadolint on warnings and errors
- Enable extended and security-and-quality CodeQL queries

https://chatgpt.com/share/6943b12d-2c84-800f-b63d-68e4d1db6d0a
2025-12-18 08:52:00 +01:00
dependabot[bot] 46a0ce3fe0 Bump actions/checkout from 4 to 6
Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 6.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v4...v6)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-18 07:47:19 +00:00
kevinveenbirkenbach d8fd8448d4 ci: centralize lint and security workflows via workflow_call
- Convert Hadolint and CodeQL workflows to reusable workflow_call
- Keep scheduled scans for Dockerfile hygiene and security analysis
- Integrate lint-docker and security-codeql into mark-stable gate
- Rename workflows for consistent lint/security naming

https://chatgpt.com/share/6943b12d-2c84-800f-b63d-68e4d1db6d0a
2025-12-18 08:45:38 +01:00