Repo ini menyimpan lebih dari satu image CI. Masing-masing punya Dockerfile, workflow, dan skema tag sendiri:
| Image | Sumber | Paket GHCR | Tag git rilis |
|---|---|---|---|
| toolchain siub | Dockerfile (root) |
ghcr.io/qisthidev/siub-ci/php85-bun |
v<N> |
| PHP 8.5 + bun + SQL Server | php85-bun-sqlsrv/Dockerfile |
ghcr.io/qisthidev/ci-image |
php85-bun-sqlsrv-v<N> |
ghcr.io/qisthidev/ci-image:php85-bun-sqlsrv-v1 # tag rilis
ghcr.io/qisthidev/ci-image:latest # menunjuk rilis terbaru image ini
ghcr.io/qisthidev/ci-image:php85-bun-sqlsrv-edge # HEAD main, untuk dicoba dulu
Isi: laravoltdev/image:php8.5-frankenphp-debian + bun (dipatok) + ext-sockets +
pdo_sqlsrv/sqlsrv + unixODBC + Microsoft ODBC Driver 18. Dipakai bersama oleh
repo yang test-nya memverifikasi hasil langsung ke SQL Server.
Image ini tidak membawa cache composer/bun milik repo mana pun: isinya
bergantung pada composer.lock/bun.lock satu repo, jadi tempatnya di layer
turunan. Pola yang dipakai di repo turunan (.github/ci/Dockerfile), dibangun di
host runner dengan konteks ROOT repo:
FROM ghcr.io/qisthidev/ci-image:php85-bun-sqlsrv-v1
ENV COMPOSER_CACHE_DIR=/root/.cache/composer
COPY composer.json composer.lock /tmp/warm-composer/
RUN cd /tmp/warm-composer \
&& composer install --no-interaction --prefer-dist --no-progress \
--no-scripts --no-plugins --no-autoloader \
&& rm -rf /tmp/warm-composer
COPY package.json bun.lock /tmp/warm-bun/
RUN cd /tmp/warm-bun && bun install --frozen-lockfile && rm -rf /tmp/warm-bundocker build -t <org>-ci/php85-bun:<N> -f .github/ci/Dockerfile .Yang di-bake adalah cache-nya (dist zip), bukan vendor/ — composer install
di CI tetap jalan terhadap lock commit yang diuji, hanya saja hit cache lokal.
# ubah php85-bun-sqlsrv/Dockerfile, commit, lalu:
git tag php85-bun-sqlsrv-v2 && git push origin main php85-bun-sqlsrv-v2Naikkan FROM di repo turunan pada commit yang sama supaya perubahan image
terlihat di diff dan run lama tetap reproducible.
act_runner tidak menarik ulang image yang sudah ada di host (forcePull=false).
Untuk image baru ia menarik dari GHCR selama paketnya publik; kalau paket masih
privat, atur visibilitasnya di GitHub UI (Packages → ci-image → Package settings →
Change visibility) atau docker pull sekali di host runner.
Image toolchain CI untuk rama/siub (Gitea Actions,
runner dalang-siub). Dibangun oleh GitHub Actions dan dipublikasikan ke GHCR:
ghcr.io/qisthidev/siub-ci/php85-bun:<N>
Isi: Ubuntu 22.04 (catthehacker act), PHP 8.5 + pcov (tanpa xdebug), Composer, Bun,
Playwright Chromium, Claude Code CLI, dan fork
claude-code-gitea-action di
/opt/claude-action — lihat komentar di Dockerfile.
# ubah Dockerfile, commit, lalu:
git tag v6 && git push origin main v6 # → workflow build → ghcr.io/…/php85-bun:6Push ke main tanpa tag menghasilkan :edge dan :sha-<short> untuk dicoba dulu.
docker pull ghcr.io/qisthidev/siub-ci/php85-bun:6
# lalu di repo siub: naikkan FROM di .github/ci/Dockerfile.deps + container.image
# di workflow, build lapisan deps (vendor/ + node_modules/, privat) di dalang.Lapisan deps sengaja tidak dibangun di sini: berisi paket berlisensi (Flux Pro) dan lock file repo privat di Gitea yang tidak terjangkau dari GitHub.