Validation: T3 Arch Linux Ruby Base Image

validation-360-2026-05-10 Doc

validation pass

Ticket

pal-e-platform#360 — Create shared Arch Linux Ruby base image in Harbor with weekly rebuild pipeline.

Environment

Harbor project pal-e (id=42). Woodpecker pipeline 547 (manual trigger on main). Image: harbor.tail5b443a.ts.net/pal-e/ruby-arch:latest.

Post-merge infra steps performed

  • Created pal-e Harbor project (HTTP 201)
  • Created Harbor robot robot$pal-e+pal-e-ci with push/pull permissions
  • Added harbor_username and harbor_password repo secrets (manual+cron events)
  • Moved pipelines to .woodpecker/ for multi-pipeline discovery (PR #362, merged)
  • Updated all 25 repo secrets to allow manual+cron events (Woodpecker validates secrets across all discovered pipelines)
  • Created Woodpecker cron ruby-arch-weekly-rebuild (Sunday 6am UTC)

Checks

# Criterion How to Verify Result Evidence
1 Harbor project exists Harbor API query PASS <code>pal-e</code> project created, id=42
2 Pipeline builds and pushes image Woodpecker pipeline 547 manual trigger PASS All steps success: clone, build-and-push
3 Image exists in Harbor Harbor API: <code>/projects/pal-e/repositories</code> PASS <code>pal-e/ruby-arch:latest</code>, 366MB, 1 artifact
4 Ruby works <code>docker run ... ruby --version</code> PASS ruby 3.4.8 (2025-12-17)
5 Bundler installed <code>docker run ... gem list bundler</code> PASS bundler 4.0.11 installed; executable at <code>/root/.local/share/gem/ruby/3.4.0/bin/bundler</code>
6 jemalloc preloaded <code>docker run ... ruby -e "puts :ok"</code> (LD_PRELOAD set in image ENV) PASS Runs without error, jemalloc loaded
7 Weekly cron configured Woodpecker cron list PASS <code>ruby-arch-weekly-rebuild</code>, schedule <code>0 6 * * 0</code>, branch main

Verdict

PASS — image builds, pushes, and runs correctly. All components verified: Ruby 3.4.8, Bundler 4.0.11, jemalloc preload, weekly cron.

Discovered Issues

  • Gem bin not in PATH: Arch's Ruby puts gem install binaries in /root/.local/share/gem/ruby/3.4.0/bin/ rather than /usr/bin/. The bundler command isn't in PATH by default. Fix: add ENV PATH="/root/.local/share/gem/ruby/3.4.0/bin:${PATH}" to the Dockerfile, or use gem install --no-user-install bundler. Minor — downstream Dockerfiles can work around it.
  • Multi-pipeline secret validation: Woodpecker validates secrets from ALL discovered .woodpecker/*.yaml files against the event type, even for pipelines whose when conditions exclude that event. Required updating all 25 existing secrets to allow manual+cron events. This is a Woodpecker quirk worth documenting.