Commit Graph
14682 Commits
Author SHA1 Message Date
Environment TestandClaude Sonnet 4.6 7b2ff3b698 refactor(service): centralize systemd diagnostics into shared debug script
- Extract repeated systemctl/journalctl diagnostic blocks from
  sys-service, sys-service-terminator, sys-svc-container, and
  sys-svc-sshd handlers into a reusable files/debug.sh SPOT
- Add tasks/utils/debug.yml as the canonical Ansible wrapper
- Wrap sys-svc-sshd restart handler in block/rescue to emit
  diagnostics and sshd -t config validation on failure

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-11 07:30:42 +02:00
Environment TestandClaude Sonnet 4.6 23d2e177f2 refactor(mirror): extract inline workflow scripts into standalone shell scripts
Move inline bash from images-mirror-all.yml and images-mirror-missing.yml
into dedicated scripts:
- scripts/meta/resolve/ghcr/namespace_and_repository.sh
- scripts/meta/mirror/sync_all.sh
- scripts/meta/mirror/sync_missing.sh

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-11 04:42:22 +02:00
dependabot[bot] de6fe82047 build(deps-dev): bump @playwright/test
Bumps [@playwright/test](https://github.com/microsoft/playwright) from 1.58.2 to 1.59.1.
- [Release notes](https://github.com/microsoft/playwright/releases)
- [Commits](https://github.com/microsoft/playwright/compare/v1.58.2...v1.59.1)

---
updated-dependencies:
- dependency-name: "@playwright/test"
  dependency-version: 1.59.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-11 01:52:25 +00:00
dependabot[bot] 11eaf46584 build(deps): bump actions/setup-node from 4 to 6
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 4 to 6.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/v4...v6)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-11 01:52:22 +00:00
kevinveenbirkenbach 7dc02df919 Merge pull request #142 from kevinveenbirkenbach/feature/pre-commit
Introduce pre-commit enforcement & improve CI coverage
2026-04-11 03:51:33 +02:00
Environment TestandClaude Sonnet 4.6 2d221b1f10 fix(ci): cancel branch runs via concurrency group on branch delete
Use workflow-level concurrency matching entry-push-latest.yml to
automatically cancel in-progress runs when a branch is deleted.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-11 03:37:13 +02:00
Environment TestandClaude Sonnet 4.6 ac3b437733 fix(test): resolve self-exclusion bug in environment orchestrator
The self-exclusion check compared BASH_SOURCE[0] (relative path when
invoked as `bash ./scripts/…/00_orchestrator.sh`) against the glob-built
step paths (always absolute). The mismatch caused the orchestrator to
include itself in the loop, running a full inner pass of steps 01–10
before the outer loop repeated them — doubling the total runtime.

Fix: resolve SELF to an absolute path using SCRIPT_DIR so the comparison
is always path-equivalent regardless of invocation style.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-11 02:09:37 +02:00
Environment TestandClaude Sonnet 4.6 0fb26ffc25 fix(urls): replace dead URLs with correct targets and treat connection errors as warnings
- dev-fakeroot: Wikipedia (404) → Debian Wiki for fakeroot
- svc-opt-keyboard-color: Nimayer/msi-perkeyrgb (404) → Askannz/msi-perkeyrgb
- bigbluebutton env.j2: all gl-admin/gl-overview paths → greenlight/v3/install/
- fider env.j2: getfider.com/docs/hosting → docs.fider.io/self-hosted/
- magento env.j2: bitnami/magento → bitnamicharts/magento
- test_littlejs.py: use example.com domain instead of internal infinito.nexus
- test_urls_reachable.py: treat ConnectionError as warning instead of failure

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-11 01:46:11 +02:00
Environment TestandClaude Sonnet 4.6 c2fcc58259 fix(urls): suppress unreachable URLs, fix dead links, and correct Matrix spec paths
- Add `# nocheck: url` / `<!-- nocheck: url -->` above-line suppression support
- Fix Matrix mautrix templates: desktop-server-api → client-server-api
- Fix Mobilizon geospatial URLs (Addok, Photon) with above-line nocheck
- Add nocheck markers for BigBlueButton, Fider, Magento, Matomo, OnlyOffice
- Fix dead Retroarch, AUR, base-devel, and BigBlueButton Greenlight links
- Remove unresolvable WireGuard link; add nocheck for Wikipedia connection resets
- Remove unit tests for integration test logic (test_external_url_reachability.py)
- Document rule: MUST NOT write unit tests for integration test logic

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-11 01:26:31 +02:00
Environment TestandClaude Sonnet 4.6 ffba8e8b8f docs(roles): apply readme_md.md and documentation rules to all READMEs
- Remove emojis from all role README headings (MUST NOT per readme_md.md)
- Rename ## Other Resources → ## Further Resources across role READMEs
- Add missing ## Credits section (required) to 16 role READMEs
- Fix Credits format: remove emojis, use canonical 4-line format
- Remove non-standard sections: ## Usage, ## Contributions, ## Documentation, ## Author, ## Role Variables, ## Requirements
- Convert ## Installation → ## Developer Notes (web-app-bluesky)
- Fix section order: Description before Overview (web-app-roulette-wheel)
- Remove text-only bullets from ## Further Resources (sys-ctl-alm-email, sys-ctl-alm-telegram, web-app-gitea)
- Fix ## sys-ctl-hlth-webserver title to human-readable form
- Restructure svc-opt-keyboard-color and sys-svc-sshd to standard section order
- Add ## Description + ## Overview to web-app-fider
- Remove ## Documentation self-reference in web-svc-onlyoffice
- Remove ### Key Features subsection from web-svc-file Overview
- Add missing Part of the Infinito.Nexus Project line in web-app-roulette-wheel Credits

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-11 01:06:24 +02:00
Environment TestandClaude Sonnet 4.6 750c110f45 fix(docs): apply documentation rules, fix URLs, and remove orphaned references
- Apply documentation.md rules across staged files (emojis after headlines, RFC 2119 keywords, correct link text, Credits format)
- Remove expired ChatGPT share URLs from 39+ role READMEs and templates
- Remove orphaned text after link deletion: bare # @see, {# @see  #}, Discussion: #}, empty Chat Conversation sections, dangling "Conversation is here available.", "Refer to the conversation with ChatGPT ()", "See ChatGPT Conversation", "ChatGPT Session Transcript" references
- Remove empty ## Further Resources and ## Credits sections where no links remain
- Fix URL reachability test: treat 401/403/405 as ok, 429/500/503 as warn, Timeout as warn; add # nocheck: url suppression (inline and line-above)
- Add lint test for broken relative and repo-root-absolute markdown links
- Add # nocheck: url to AUR git clone URLs, CSP allowlist entries, and other non-browser URLs
- Restore docs.infinito.nexus/setup in documentation.md MUST NOT example
- Fix Mobilizon geospatial endpoints (Addok, Photon) reverted to original values with # nocheck: url
- Add integration test rule: MUST NOT write unit tests for integration test logic

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-11 00:38:42 +02:00
Environment TestandClaude Sonnet 4.6 2b90239282 test(external): fail on client/server errors instead of warning for dead links
Change the URL reachability test to fail on 4xx, non-500 5xx, and
request errors (DNS, connection). Only HTTP 500 now emits a warning
annotation, distinguishing temporary upstream breakage from dead links.
Add a unit test for the probe classification logic.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 23:23:43 +02:00
Environment Test 78a69130c9 test(external): add live url reachability scan 2026-04-10 23:01:25 +02:00
Environment Test 51341629d6 docs(external): clarify suite behavior 2026-04-10 22:42:23 +02:00
Environment Test 212cc39052 test(external): split live registry checks
Keep live registry lookups out of the default make test flow.

Add a dedicated external suite, workflow, and docs so the check stays opt-in but still gates code CI when enabled.
2026-04-10 22:31:42 +02:00
Environment TestandClaude Sonnet 4.6 0b8e16a45d test(lint): add markdown link checker and fix all broken links
Add tests/lint/repository/test_markdown_links.py — a hard-fail lint
test that scans all git-tracked markdown files for broken relative and
repo-root-absolute links. Skips external URLs, anchor-only links, fenced
code blocks, and placeholder targets.

Apply documentation.md rules to all staged files: add emojis after
headlines in docs files, remove emojis from role README headings,
standardize Credits sections to the canonical format, remove empty
sections and orphaned sentences referring to missing documentation files,
fix raw URLs and incorrect link text across role READMEs and docs.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 22:00:46 +02:00
Environment TestandClaude Sonnet 4.6 83262816a3 docs(contributing): apply documentation.md rules across all staged files
- Move emojis after headline text (CONTRIBUTING.md, actions/, design/, tools/, tests/)
- Replace em dashes with colons, semicolons, or complete sentences throughout
- Add missing emojis to all headlines in exceptions.md, principles.md, services.md, shell.md, setup.md, pull-request.md, commit.md, act.md, docker.md, pr/README.md
- Update H1 titles to reflect renamed directories (actions/, design/)
- Fix broken relative links in workflow.md after directory moves
- Fix full-path link texts in services.md (style.css.md, javascript.js.md)
- Fix broken principles.md link to lint.md after testing/ → actions/testing/ move

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 21:06:17 +02:00
Environment TestandClaude Sonnet 4.6 4a17cf4538 docs(workflows): document naming schema and emoji legend in workflow.md
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 20:32:04 +02:00
Environment TestandClaude Sonnet 4.6 27ab7cc1fb chore(workflows): shorten Update workflow name to 🔄 Update: Versions
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 20:27:48 +02:00
Environment TestandClaude Sonnet 4.6 c921ab6c87 chore(workflows): shorten DNS workflow name and use 💬 emoji
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 20:25:38 +02:00
Environment TestandClaude Sonnet 4.6 e1fb10772a chore(workflows): rename install workflows to Test: Install with 📥 emoji
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 20:22:46 +02:00
Environment TestandClaude Sonnet 4.6 dc83eb4aed chore(workflows): use 💻 emoji for Test: Development Environment
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 20:19:35 +02:00
Environment TestandClaude Sonnet 4.6 7fa2a7593b chore(workflows): use 📦 emoji for Test: Deploy workflows
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 20:18:04 +02:00
Environment TestandClaude Sonnet 4.6 0a147718a4 fix(workflows): quote workflow names to fix YAML syntax error
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 20:12:12 +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
Environment TestandClaude Sonnet 4.6 08bb7fefc0 refactor(docs): move code/tests → contributing/testing, lint tests to lint/ansible, apply documentation.md rules
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 19:55:25 +02:00
Environment TestandClaude Sonnet 4.6 51f386faf2 docs(tests): add suppression comment matrix to lint.md
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 19:36:15 +02:00
Environment TestandClaude Sonnet 4.6 5b7e1ffe5e fix(moodle): pin version 4.5 with nocheck to suppress automated update PR
Moodle 4.5 is the required LTS version for OIDC compatibility.
The nocheck comment prevents the docker image version updater from
opening automated PRs to bump this version.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 19:28:16 +02:00
Environment TestandClaude Sonnet 4.6 f04ef665fd fix(workflow): change UPDATE_BASE_BRANCH from master to main
The default branch of infinito-nexus-core is main, not master.
Using master caused gh pr create to fail with 'Base ref must be a branch'.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 19:24:48 +02:00
Environment TestandClaude Sonnet 4.6 6835057707 fix(github): use owner:branch format for --head in gh pr create
When --repo is passed to gh, the --head argument must include the owner
in owner:branch format so GitHub can resolve the head SHA correctly.
Without it the GraphQL API returns 'Head sha can't be blank'.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 19:22:05 +02:00
Environment TestandClaude Sonnet 4.6 46f8f775c1 fix(github): use --force instead of --force-with-lease for update branch push
--force-with-lease requires a remote-tracking ref to exist locally. In a
fresh CI checkout the update branch has no tracking ref, so the push is
rejected as stale. The update branch is always owned by automation, so
--force is safe here.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 19:20:22 +02:00
Prageeth Panicker 5f1031ce73 fix(web-app-decidim): fix deployment, Playwright tests and user seeding
- Fix login form submission using form.evaluate() to bypass hidden button
- Add administrator and biber user creation with accepted_tos_version
- Use double quotes for passwords to handle special characters
- Only set password on new users to avoid reuse validation errors
- Simplify conversation tests to verify UI accessibility
- Disable sidekiq service (not needed for basic deployment)
- Add allowed_hosts.rb.j2 initializer to fix Rails host authorization
- Mount allowed_hosts initializer into decidim container
- Fix DATABASE_URL password encoding for special characters
- Strip trailing slash from RAILS_HOSTS
- Remove Dockerfile.j2 (using prebuilt image)
- Use ENVIRONMENT variable instead of hardcoded production
2026-04-10 17:16:41 +00:00
Environment TestandClaude Sonnet 4.6 86aa1a9629 fix(github): pass --repo explicitly to gh pr commands in open_update_pr.sh
Without --repo, gh targets the wrong repository context when GH_TOKEN is
used in a workflow that runs outside the target repo. Infer the repo from
the git remote URL and pass it to gh pr list, gh pr edit, and gh pr create.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 19:10:30 +02:00
Environment TestandClaude Sonnet 4.6 eebb3b9788 refactor(utils): move utils/docker/image_*.py into utils/docker/image/ subpackage
- Move image_discovery.py → utils/docker/image/discovery.py
- Move image_ref.py → utils/docker/image/ref.py
- Add utils/docker/image/__init__.py
- Update all imports and references across cli/, tests/, utils/, and docs/

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 19:00:02 +02:00
Environment TestandClaude Sonnet 4.6 bf8c535988 feat(update): add docker image version updater CLI, workflow, and lint tests
- Add utils/docker/version_updater.py with CLI for updating Docker image versions
- Add cli/fix/docker_image_versions module wrapping the updater
- Add .github/workflows/update.yml replacing update-skills.yml
- Add scripts/github/ helpers: check_git_changes, install_update_python, open_update_pr, update_docker_image_versions
- Add tests/lint/filesystem/ for scripts/ and utils/ folder file-type enforcement
- Add tests/lint/ansible/ for legacy module usage and vars usage checks
- Reorganize tests/lint/repository/ and move test_vars_usage_in_yaml.py to ansible/
- Add artefact docs: files/github/workflow.md, scripst.md, utils.md
- Apply documentation.md standards to all modified markdown files

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 18:38:39 +02:00
Environment Test 80fe5e3846 docs: add scope README docs under docs
- document docs README purpose and scope in a dedicated SPOT
- add scope-focused README.md files across docs directories
- remove lint rule that banned README.md files under docs
2026-04-10 17:23:10 +02:00
Environment TestandClaude Sonnet 4.6 7e098478a9 docs(contributing): remove duplication and apply documentation.md standards to readme_md.md
- Remove duplicated role README requirement from documentation.md (SPOT is readme_md.md)
- Add cross-reference from readme_md.md to documentation.md for general rules
- Fix em dashes in readme_md.md
- Apply RFC 2119 keywords where missing
- Add emojis to all headlines in both files

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 16:42:45 +02:00
Environment TestandClaude Sonnet 4.6 5c1a963d30 docs(tools): restructure security and framework docs, add cleanup workflow
- Move flow/security/ghcr.md to tools/ghcr/authentication.md
- Move flow/security/mirror-cleanup.md to tools/ghcr/cleanup.md
- Move flow/security/branch.md to tools/github/branch.md
- Move flow/security/repository.md to tools/github/repository.md
- Move code/frameworks/ansible.md to tools/ansible.md
- Merge code/frameworks/Makefile.md into tools/make.md and extract file rules to artefact/files/makefile.md
- Rename tools/makefile.md to tools/make.md
- Add .github/workflows/images-mirror-cleanup.yml for manual GHCR cleanup
- Apply documentation.md standards: emojis on headlines, no em dashes, filename link text
- Fix all cross-references broken by directory restructuring

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 16:31:22 +02:00
Environment TestandClaude Sonnet 4.6 d8996c2d0f docs(artefact): restructure image/mirror docs and move code/role to artefact/files/role
- Rename artefact/image.md to artefact/image/origin.md and merge code/role/image.md into it
- Move artefact/mirror.md to artefact/image/mirror.md
- Move docs/contributing/code/role/ to docs/contributing/artefact/files/role/
- Rename readme_base.md to readme_md.md
- Apply documentation.md standards (emojis, RFC 2119, link text) to all modified files
- Fix all cross-references broken by the directory restructuring
- Remove publish section from mirror.md (module deleted in prior commit)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 15:33:19 +02:00
Environment TestandClaude Sonnet 4.6 ce19aff65f feat(mirror): add cleanup module to delete private GHCR packages
Adds cli.mirror.cleanup for deleting GHCR container packages by prefix
and visibility via the GitHub Packages REST API. Supports dry-run mode.
Requires a classic PAT with delete:packages scope (GITHUB_TOKEN from
gh auth or GitHub Actions does not include this scope).

Also adds unit tests and a usage guide at
docs/contributing/flow/security/mirror-cleanup.md.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 14:54:39 +02:00
Environment TestandClaude Sonnet 4.6 7cb80eb830 fix(mirror): use GITHUB_TOKEN for GHCR push to auto-publish packages
Replaces GHCR_PAT-based authentication with GITHUB_TOKEN across all
mirror and build workflows. Packages pushed from a public repository
with GITHUB_TOKEN are automatically linked to the repository and
inherit its public visibility — no publish step required.

Removes cli.mirror.publish (used a non-existent GitHub REST API
endpoint for changing package visibility), the associated unit tests,
and the GHCR_PAT debug helper. Cleans up all GHCR_PAT/GHCR_USERNAME
references and rewrites the GHCR authentication documentation.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 14:25:51 +02:00
Environment TestandClaude Sonnet 4.6 94d56a35a0 fix(mirror): include repository name in publish prefix
The publish step was filtering packages by prefix 'mirror/' but images
are pushed to ghcr.io/{ns}/{repo}/mirror/... so the package names in
the GitHub Packages API are '{repo}/mirror/...'. The new packages were
never found and thus remained private.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 13:00:55 +02:00
Environment TestandClaude Sonnet 4.6 6c8547c6a4 feat(skills): add agent skills install/update pipeline and caveman docs
- Add scripts/install/skills/install.sh to restore skills from
  skills-lock.json via npx skills experimental_install
- Add scripts/install/skills/update.sh to update all skills by
  re-running skills add for each source in skills-lock.json
- Add make install-skills and make update-skills targets
- Add .github/workflows/update-skills.yml for daily automated updates
  matching Dependabot schedule (00:00 UTC), opens PR on lock changes
- Add docs/agents/meta/caveman.md as SPOT for caveman mode, startup
  notification, and token-budget tier progression
- Update AGENTS.md with RFC 2119-compliant skills installation check
- Update docs/agents/action/commit.md: replace ALWAYS with MUST
- Update pyproject.toml: respect-gitignore = true, exclude .agents
- Track skills-lock.json and add .agents to .gitignore

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 12:54:43 +02:00
Environment TestandClaude Sonnet 4.6 83f7010e3b feat(autoformat): add make autoformat target with dedicated script
Adds scripts/lint/autoformat.sh that checks tool availability before
running ruff, shfmt, and shellcheck autofixes. Updates Makefile with
the new autoformat target, documents it in makefile.md, and adds a
commit.md rule requiring autoformat to be run before every commit.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 11:49:56 +02:00
Environment TestandClaude Sonnet 4.6 8bf0b695b7 refactor(ci): move GHCR_USERNAME from secret to variable
Usernames are not sensitive — storing them as secrets only adds friction
without security benefit. Replace secrets.GHCR_USERNAME with vars.GHCR_USERNAME
across all workflows and remove GHCR_USERNAME from secrets: input blocks in
reusable workflows. Update ghcr.md to document it as a variable.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 11:27:29 +02:00
Environment TestandClaude Sonnet 4.6 aa33256cde feat(mirror): split resolver output, move images to defaults, add lookup plugin
- resolver: output both applications: (config/main.yml compose images) and
  images: (defaults/main.yml images) keyed by source_file
- image_discovery: scan defaults/main.yml instead of vars/main.yml for images:
- mirror_overrides: write mirror URLs to applications.*.compose.services.*
  (mirror_policy-aware) and images_overrides.*.* (always merged, if_missing)
- roles/sys-ctl-hlth-csp, roles/test-e2e-playwright: move images: from
  vars/main.yml to defaults/main.yml for correct Ansible variable precedence
- plugins/lookup/image.py: new Ansible lookup plugin that prefers
  images_overrides over role-local images defaults
- docs: add artefact/image.md and artefact/mirror.md as SPOTs; add
  code/role/image.md contributor guide; link from ci.md
- tests: update test_util, test_mirror_overrides; add test_resolver,
  test_publish (404/401 coverage), test_image (lookup plugin)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 11:17:42 +02:00
Environment TestandClaude Sonnet 4.6 0c2c9d592c fix(publish): encode slashes in package name and fix skipped-count logic
- Replace safe="/" with safe="" so package names like
  mirror/docker.io/openresty/openresty are encoded as a single URL path
  segment (mirror%2Fdocker.io%2Fopenresty%2Fopenresty). With literal
  slashes GitHub's router matched only "mirror" as the package name → 404.
- _set_public now returns bool; main() only prints "✓ set to public" and
  increments updated when True. Previously a 404-skip returned None which
  still triggered the success path.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 01:48:37 +02:00
Environment TestandClaude Sonnet 4.6 6faf3c9a2d fix(publish): treat HTTP 404 as missing package, not token error
Old packages (pre-rename) have no versions left in GHCR and return 404
on PATCH. This caused an early exit that skipped all remaining packages.
404 means the package is gone; actual token scope failures return 401/403.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 01:39:52 +02:00
Environment TestandClaude Sonnet 4.6 b6d4fdd8b4 fix(mirror): remove --ghcr-repository from publish step
publish only needs namespace + prefix to list and update GHCR packages
via the API. The repository argument was erroneously copied from the sync
step and caused an argparse error.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 01:32:32 +02:00
Environment TestandClaude Sonnet 4.6 402ab2df4e fix(dependabot): use explicit paths for npm and bundler (** not supported)
- npm: /roles/test-e2e-playwright/files
- bundler: /roles/web-app-openproject/files

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 01:12:33 +02:00