75 Commits
Author SHA1 Message Date
jcabillot aa730b3066 Merge pull request 'ci(tag): déclenche Renovate sur tf-depl-kubernetes dès que l'image de release est poussée (ip)' (#39) from ci/renovate-dispatch-on-release into master
Main Release / test (push) Successful in 55s
Renovate / renovate (push) Successful in 44s
Main Release / build (push) Successful in 1m15s
Main Release / tag (push) Successful in 19s
Tag Release / build-push (push) Successful in 1m38s
Tag Release / trigger-renovate (push) Failing after 13s
Main Release / hadolint (push) Successful in 24s
Tag Release / hadolint (push) Successful in 12s
Tag Release / test (push) Successful in 1m30s
Reviewed-on: #39
2026-10-18 13:44:31 -04:00
opencodecabilloteu 66520eee9e ci(tag): dispatch Renovate on tf-depl-kubernetes once the release image is pushed
PR Checks / hadolint (pull_request) Successful in 35s
PR Checks / build-test (pull_request) Successful in 47s
A release only reached perso_private/tf-depl-kubernetes on the next hourly
Renovate scan, so the image bump PR could lag up to an hour behind the tag.

After the image push completes, dispatch that repo's Renovate workflow through
the Gitea API (workflow_dispatch is already enabled there). It authenticates
with the RENOVATE_TOKEN org secret of this organisation — the same token the
Renovate instance itself uses, no extra credential. The job fails loudly so a
rotated token shows up instead of the trigger silently going missing.
2026-10-18 13:24:16 -04:00
opencodecabilloteu 9284d26b3e Merge pull request 'chore(deps): update docker/setup-buildx-action digest to f87e599' (#38) from renovate/docker-setup-buildx-action-digest into master
Main Release / test (push) Successful in 37s
Renovate / renovate (push) Successful in 58s
Main Release / build (push) Successful in 22s
Main Release / tag (push) Successful in 12s
Tag Release / build-push (push) Successful in 50s
Main Release / hadolint (push) Successful in 10s
Tag Release / hadolint (push) Successful in 8s
Tag Release / test (push) Successful in 32s
2026-09-18 04:30:48 -04:00
renovate 9da0c77ef2 chore(deps): update docker/setup-buildx-action digest to f87e599
renovate/stability-days Updates have met minimum release age requirement
PR Checks / hadolint (pull_request) Successful in 12s
PR Checks / build-test (pull_request) Successful in 37s
2026-09-18 08:27:38 +00:00
jcabillot 10b47ab1fd Merge pull request 'chore: remove legacy GitLab CI and Jenkins files' (#37) from ci/remove-legacy-ci into master
Main Release / test (push) Successful in 43s
Renovate / renovate (push) Successful in 50s
Main Release / build (push) Successful in 37s
Main Release / tag (push) Successful in 1m14s
Tag Release / build-push (push) Successful in 3m7s
Main Release / hadolint (push) Successful in 13s
Tag Release / hadolint (push) Successful in 15s
Tag Release / test (push) Successful in 38s
Reviewed-on: #37
2026-09-02 09:47:28 -04:00
OpenCode Cabillot 62f27c93c6 chore: remove legacy GitLab CI and Jenkins files
PR Checks / hadolint (pull_request) Successful in 16s
PR Checks / build-test (pull_request) Successful in 44s
2026-09-02 13:45:12 +00:00
opencodecabilloteu 8d9ebb1f93 Merge pull request 'chore(deps): update hadolint/hadolint-action action to v3.5.0' (#36) from renovate/hadolint-hadolint-action-3.x into master
Main Release / test (push) Successful in 39s
Renovate / renovate (push) Successful in 2m40s
Main Release / build (push) Successful in 34s
Main Release / tag (push) Successful in 24s
Tag Release / build-push (push) Successful in 3m28s
Main Release / hadolint (push) Successful in 19s
Tag Release / hadolint (push) Successful in 15s
Tag Release / test (push) Successful in 39s
2026-08-26 10:30:54 -04:00
renovate 9e3642f969 chore(deps): update hadolint/hadolint-action action to v3.5.0
renovate/stability-days Updates have met minimum release age requirement
PR Checks / hadolint (pull_request) Successful in 19s
PR Checks / build-test (pull_request) Successful in 40s
2026-08-26 14:28:02 +00:00
opencodecabilloteu 4650020375 Merge pull request 'chore(deps): update docker/setup-buildx-action digest to 37fe631' (#35) from renovate/docker-setup-buildx-action-digest into master
Main Release / test (push) Failing after 55s
Main Release / build (push) Skipped
Main Release / tag (push) Skipped
Renovate / renovate (push) Successful in 2m47s
Main Release / hadolint (push) Successful in 20s
2026-08-21 06:31:40 -04:00
renovate 5274aea968 chore(deps): update docker/setup-buildx-action digest to 37fe631
renovate/stability-days Updates have met minimum release age requirement
PR Checks / hadolint (pull_request) Successful in 18s
PR Checks / build-test (pull_request) Successful in 47s
2026-08-21 10:29:15 +00:00
jcabillot ba2403c295 Merge pull request 'ci: add Renovate workflow' (#34) from add-renovate-workflow into master
Main Release / test (push) Successful in 1m23s
Renovate / renovate (push) Successful in 2m58s
Main Release / build (push) Successful in 1m6s
Main Release / tag (push) Successful in 48s
Tag Release / build-push (push) Successful in 6m27s
Main Release / hadolint (push) Successful in 33s
Tag Release / hadolint (push) Successful in 50s
Tag Release / test (push) Successful in 1m25s
Reviewed-on: #34
2026-08-03 16:13:29 -04:00
OpenCode Cabillot 8da7d217fd ci: add Renovate workflow
PR Checks / hadolint (pull_request) Successful in 10s
PR Checks / build-test (pull_request) Successful in 23s
2026-08-02 23:52:09 +00:00
opencodecabilloteu c2c2363cd7 Merge pull request 'chore(deps): update hadolint/hadolint-action action to v3.4.0' (#31) from renovate/hadolint-hadolint-action-3.x into master
Main Release / test (push) Successful in 52s
Main Release / build (push) Successful in 58s
Main Release / tag (push) Successful in 1m34s
Tag Release / build-push (push) Successful in 5m3s
Main Release / hadolint (push) Successful in 2m22s
Tag Release / hadolint (push) Successful in 44s
Tag Release / test (push) Successful in 55s
2026-08-02 12:55:23 -04:00
renovate 0e17a94f35 chore(deps): update hadolint/hadolint-action action to v3.4.0
renovate/stability-days Updates have met minimum release age requirement
PR Checks / hadolint (pull_request) Successful in 23s
PR Checks / build-test (pull_request) Successful in 55s
2026-08-02 16:51:11 +00:00
jcabillot bceca024fd Merge pull request 'fix: ignore hadolint DL3066 for non-numeric USER www-data' (#32) from fix/hadolint-dl3066 into master
Main Release / test (push) Successful in 41s
Main Release / build (push) Successful in 26s
Main Release / tag (push) Successful in 23s
Tag Release / build-push (push) Successful in 3m3s
Main Release / hadolint (push) Successful in 13s
Tag Release / hadolint (push) Successful in 11s
Tag Release / test (push) Successful in 28s
Reviewed-on: #32
2026-08-02 12:35:30 -04:00
opencodecabilloteu ad8b3b7830 fix: ignore hadolint DL3066 for non-numeric USER www-data
PR Checks / hadolint (pull_request) Successful in 15s
PR Checks / build-test (pull_request) Successful in 1m11s
2026-08-02 16:26:21 +00:00
jcabillot 0235b4fb09 Merge pull request 'chore(deps): update docker/login-action digest to dbcb813' (#30) from renovate/docker-login-action-digest into master
Main Release / test (push) Successful in 23s
Main Release / build (push) Successful in 33s
Main Release / tag (push) Successful in 40s
Tag Release / build-push (push) Successful in 6m56s
Main Release / hadolint (push) Successful in 9s
Tag Release / hadolint (push) Successful in 42s
Tag Release / test (push) Successful in 2m16s
Reviewed-on: #30
2026-07-29 11:40:59 -04:00
renovate 67f42be8ff chore(deps): update docker/login-action digest to dbcb813
renovate/stability-days Updates have met minimum release age requirement
PR Checks / hadolint (pull_request) Successful in 9s
PR Checks / build-test (pull_request) Successful in 23s
2026-07-29 13:04:10 +00:00
jcabillot ca500889ac Merge pull request 'chore(deps): update docker/login-action digest to 371161b' (#29) from renovate/docker-login-action-digest into master
Main Release / test (push) Successful in 29s
Main Release / build (push) Successful in 19s
Main Release / tag (push) Successful in 15s
Tag Release / build-push (push) Skipped
Main Release / hadolint (push) Successful in 10s
Tag Release / hadolint (push) Successful in 11s
Tag Release / test (push) Failing after 33s
Reviewed-on: #29
2026-07-28 16:52:45 -04:00
renovate a747ae530b chore(deps): update docker/login-action digest to 371161b
renovate/stability-days Updates have met minimum release age requirement
PR Checks / hadolint (pull_request) Successful in 11s
PR Checks / build-test (pull_request) Successful in 33s
2026-07-28 08:03:43 +00:00
jcabillot 75da7f2cd5 Merge pull request 'chore(deps): update actions/checkout digest to 3d3c42e' (#28) from renovate/actions-checkout-digest into master
Main Release / test (push) Successful in 40s
Main Release / build (push) Successful in 2m34s
Main Release / tag (push) Successful in 41s
Tag Release / build-push (push) Successful in 3m37s
Main Release / hadolint (push) Successful in 10s
Tag Release / hadolint (push) Successful in 11s
Tag Release / test (push) Successful in 27s
Reviewed-on: #28
2026-07-22 08:10:16 -04:00
renovate b7f421ed4f chore(deps): update actions/checkout digest to 3d3c42e
renovate/stability-days Updates have met minimum release age requirement
PR Checks / build-test (pull_request) Successful in 21s
PR Checks / hadolint (pull_request) Successful in 8s
2026-07-20 16:03:28 +00:00
jcabillot ebd1dedfc0 Merge pull request 'chore(deps): update docker/login-action digest to af1e73f' (#27) from renovate/docker-login-action-digest into master
Main Release / test (push) Successful in 19s
Main Release / build (push) Successful in 15s
Main Release / tag (push) Successful in 16s
Tag Release / test (push) Successful in 20s
Tag Release / build-push (push) Successful in 3m38s
Main Release / hadolint (push) Failing after 12m22s
Tag Release / hadolint (push) Successful in 11s
Reviewed-on: #27
2026-07-03 16:19:52 -04:00
renovate 1f6bf7947d chore(deps): update docker/login-action digest to af1e73f
renovate/stability-days Updates have met minimum release age requirement
PR Checks / build-test (pull_request) Successful in 18s
PR Checks / hadolint (pull_request) Successful in 8s
2026-07-03 14:13:37 +00:00
jcabillot eddf84387e Merge pull request 'chore(deps): update docker/metadata-action digest to dc80280' (#25) from renovate/docker-metadata-action-digest into master
Main Release / test (push) Successful in 30s
Main Release / build (push) Successful in 17s
Main Release / tag (push) Successful in 9s
Tag Release / test (push) Successful in 18s
Main Release / hadolint (push) Successful in 11s
Tag Release / hadolint (push) Successful in 15s
Tag Release / build-push (push) Successful in 1m11s
Reviewed-on: #25
2026-07-02 09:27:01 -04:00
jcabillot 75e1cbcb1c Merge pull request 'chore(deps): update docker/login-action digest to c99871d' (#24) from renovate/docker-login-action-digest into master
Main Release / test (push) Successful in 24s
Main Release / build (push) Successful in 16s
Main Release / tag (push) Successful in 14s
Main Release / hadolint (push) Successful in 16s
Reviewed-on: #24
2026-07-02 09:26:58 -04:00
renovate 7d55299019 chore(deps): update docker/metadata-action digest to dc80280
renovate/stability-days Updates have met minimum release age requirement
PR Checks / build-test (pull_request) Successful in 26s
PR Checks / hadolint (pull_request) Successful in 18s
2026-07-02 12:41:02 +00:00
renovate 31897516d1 chore(deps): update docker/login-action digest to c99871d
renovate/stability-days Updates have met minimum release age requirement
PR Checks / build-test (pull_request) Successful in 49s
PR Checks / hadolint (pull_request) Successful in 19s
2026-07-02 12:40:51 +00:00
opencodecabilloteu 6b9e2efe40 chore(deps): update docker/setup-buildx-action digest to bb05f3f
Main Release / test (push) Successful in 20s
Main Release / build (push) Successful in 27s
Main Release / tag (push) Successful in 18s
Tag Release / test (push) Successful in 25s
Tag Release / build-push (push) Successful in 2m19s
Main Release / hadolint (push) Successful in 7s
Tag Release / hadolint (push) Successful in 16s
chore(deps): update docker/setup-buildx-action digest to bb05f3f
2026-07-02 08:28:01 -04:00
renovate 2cab8f5261 chore(deps): update docker/setup-buildx-action digest to bb05f3f
PR Checks / build-test (pull_request) Successful in 13s
PR Checks / hadolint (pull_request) Successful in 7s
2026-07-02 09:52:39 +00:00
jcabillot 37cf75f7b0 Merge pull request 'fix: remove obsolete jcabillot/phpapache references' (#23) from fix/remove-phpapache-renovate into master
Main Release / test (push) Successful in 18s
Main Release / build (push) Successful in 21s
Main Release / tag (push) Successful in 34s
Tag Release / test (push) Successful in 22s
Tag Release / build-push (push) Successful in 3m18s
Main Release / hadolint (push) Successful in 8s
Tag Release / hadolint (push) Successful in 23s
Reviewed-on: #23
2026-06-29 15:33:47 -04:00
Hermes Agent 4e10bdc92d fix: remove obsolete jcabillot/phpapache references
PR Checks / build-test (pull_request) Successful in 20s
PR Checks / hadolint (pull_request) Successful in 20s
- Delete renovate.json: custom manager for jcabillot/phpapache ARG VERSION
  is obsolete since migration to dunglas/frankenphp.
- Update AGENTS.md: reflect FrankenPHP/Caddy base image, /app/public,
  no ARG VERSION, fixed tag.
2026-06-29 19:32:35 +00:00
jcabillot b9ee6ab52b Merge pull request 'fix: migrate from jcabillot/phpapache to dunglas/frankenphp' (#22) from fix/frankenphp-migration into master
Main Release / test (push) Successful in 15s
Main Release / build (push) Successful in 11s
Main Release / tag (push) Successful in 34s
Tag Release / test (push) Successful in 16s
Tag Release / build-push (push) Successful in 56s
Main Release / hadolint (push) Successful in 10s
Tag Release / hadolint (push) Successful in 10s
Reviewed-on: #22
2026-06-29 08:54:45 -04:00
Sagent 7a5a53b3db fix: migrate from jcabillot/phpapache to dunglas/frankenphp
PR Checks / build-test (pull_request) Successful in 15s
PR Checks / hadolint (pull_request) Successful in 9s
2026-06-29 12:50:50 +00:00
jcabillot 7c780311e1 Merge pull request 'fix(ci): correct corrupted docker/login-action SHA (41 chars)' (#21) from fix/login-action-sha into master
Main Release / test (push) Successful in 14s
Main Release / build (push) Successful in 13s
Main Release / tag (push) Successful in 14s
Tag Release / test (push) Successful in 15s
Tag Release / build-push (push) Successful in 47s
Main Release / hadolint (push) Successful in 7s
Tag Release / hadolint (push) Successful in 8s
Reviewed-on: #21
2026-06-29 08:16:55 -04:00
cloudix_mcp_server eaa33a9d74 fix(ci): correct corrupted docker/login-action SHA (41 chars)
PR Checks / build-test (pull_request) Successful in 18s
PR Checks / hadolint (pull_request) Successful in 11s
Extra "f" character inserted at position 29 made the SHA 41 chars
instead of 40, causing "reference not found" on Gitea Actions runner.

Fixes CI run #2440 job #6174.
2026-06-29 12:13:57 +00:00
jcabillot b2c7777597 Merge pull request 'fix(ci): correct corrupted docker/build-push-action SHA' (#20) from fix/build-push-action-sha into master
Main Release / test (push) Successful in 17s
Main Release / build (push) Successful in 17s
Main Release / tag (push) Successful in 39s
Tag Release / test (push) Successful in 14s
Tag Release / build-push (push) Failing after 4s
Main Release / hadolint (push) Successful in 10s
Tag Release / hadolint (push) Successful in 7s
Reviewed-on: #20
2026-06-29 08:08:18 -04:00
cloudix_mcp_server 0ec94f79d4 fix(ci): correct corrupted docker/build-push-action SHA
PR Checks / build-test (pull_request) Successful in 15s
PR Checks / hadolint (pull_request) Successful in 8s
The SHA for docker/build-push-action@v7.2.0 in tag.yaml and cron.yaml
was corrupted: 0d7f5c8f should be 0d6e8b85.

Correct SHA from git ls-remote refs/tags/v7.2.0:
f9f3042f7e2789586610d6e8b85c8f03e5195baf

Fixes CI run #2437 job #6165 (reference not found on docker/login-action
clone — likely cascade from the corrupted build-push-action SHA).
2026-06-29 12:05:31 +00:00
jcabillot 28e3036f5c Merge pull request 'fix(ci): correct corrupted anothrNick/github-tag-action SHA' (#19) from fix/github-tag-action-sha into master
Main Release / test (push) Successful in 14s
Main Release / build (push) Successful in 11s
Main Release / tag (push) Successful in 32s
Tag Release / test (push) Successful in 14s
Tag Release / build-push (push) Failing after 30s
Main Release / hadolint (push) Successful in 7s
Tag Release / hadolint (push) Successful in 7s
Reviewed-on: #19
2026-06-28 22:14:25 -04:00
cloudix_mcp_server 928aca5505 fix(ci): correct corrupted anothrNick/github-tag-action SHA
PR Checks / build-test (pull_request) Successful in 1m59s
PR Checks / hadolint (pull_request) Successful in 6s
The SHA in the tag job of main.yaml was corrupted — missing the leading
'4' and with mutated bytes in the middle (da04aec3cc → da9f2a04ec).
Correct SHA for v1.75.0 is 4ed44965e0db8dab2b466a16da04aec3cc312fd8.

Fixes CI run #1981 job #4861: reference not found.
2026-06-28 18:09:15 +00:00
jcabillot 3166943afc Merge pull request 'chore(deps): update actions/checkout action to v7' (#18) from renovate/actions-checkout-7.x into master
Main Release / test (push) Successful in 18s
Main Release / build (push) Successful in 15s
Main Release / tag (push) Failing after 8s
Main Release / hadolint (push) Successful in 7s
Reviewed-on: #18
2026-06-18 16:22:58 -04:00
renovate 1afb8d92c5 chore(deps): update actions/checkout action to v7
PR Checks / build-test (pull_request) Successful in 14s
PR Checks / hadolint (pull_request) Successful in 7s
2026-06-18 15:24:32 +00:00
jcabillot ddcb9f9e62 Merge pull request 'chore(deps): update docker/metadata-action digest to 80c7e94' (#17) from renovate/docker-metadata-action-digest into master
Main Release / test (push) Successful in 14s
Main Release / build (push) Successful in 13s
Main Release / tag (push) Failing after 4s
Main Release / hadolint (push) Successful in 7s
Reviewed-on: #17
2026-06-13 19:51:22 -04:00
renovate cff4255b94 chore(deps): update docker/metadata-action digest to 80c7e94
PR Checks / build-test (pull_request) Successful in 16s
PR Checks / hadolint (pull_request) Failing after 14m4s
2026-06-13 22:00:28 +00:00
jcabillot 93df1d3f8d Merge pull request 'Convert CI to standard htpasswd 4-workflow pattern (no artifact)' (#16) from fix/workflow-standard into master
Main Release / test (push) Successful in 13s
Main Release / build (push) Successful in 20s
Main Release / tag (push) Failing after 5s
Main Release / hadolint (push) Successful in 5s
Reviewed-on: #16
2026-06-13 17:59:48 -04:00
cloudix_mcp_server a4a70f93da Convert tag.yaml to standard htpasswd 4-workflow pattern (no artifact)
PR Checks / build-test (pull_request) Successful in 14s
PR Checks / hadolint (pull_request) Successful in 6s
Replace artifact upload/download with direct build per job.
Trigger on tag push (v*). Chain: hadolint→test→build-push.
2026-06-13 17:54:46 -04:00
cloudix_mcp_server 19b827a0a7 Convert pr.yaml to standard htpasswd 4-workflow pattern (no artifact)
Replace artifact upload/download with direct build per job.
Chain: hadolint→build-test.
2026-06-13 17:54:41 -04:00
cloudix_mcp_server 361c2c72be Convert cron.yaml to standard htpasswd 4-workflow pattern (no artifact)
Preserve original schedule (0 0 * * *). Replace artifact upload/download
with setup-buildx + metadata-action + build-push-action chain.
2026-06-13 17:54:39 -04:00
cloudix_mcp_server 3c2d96a317 Convert main.yaml to standard htpasswd 4-workflow pattern (no artifact)
Replace artifact upload/download with direct build per job using
setup-buildx-action. Chain: hadolint→test→build→tag.
2026-06-13 17:54:38 -04:00
jcabillot 2aa907190a Merge pull request 'feat(ci): refactor pipelines — hadolint, PR checks, tag releases, nightly rebuild' (#15) from fix/refactor-ci-pipelines into master
Main CI / lint (push) Successful in 6s
Main CI / build (push) Successful in 58s
Main CI / test (push) Successful in 22s
Main CI / push (push) Successful in 24s
Tag Release / tag (push) Failing after 8s
Reviewed-on: #15
2026-06-12 16:23:04 -04:00
cloudix_mcp_server 6eca2fc500 feat(ci): add nightly rebuild workflow
PR Checks / lint (pull_request) Successful in 7s
PR Checks / build (pull_request) Successful in 53s
PR Checks / test (pull_request) Successful in 25s
2026-06-12 16:19:29 -04:00
cloudix_mcp_server e977e99155 feat(ci): add tag release workflow 2026-06-12 16:19:23 -04:00
cloudix_mcp_server ba4c8108ab feat(ci): add main CI workflow — lint, build, test, push to Docker Hub 2026-06-12 16:19:17 -04:00
cloudix_mcp_server 4f38b4377f feat(ci): add PR checks workflow — hadolint, build, test 2026-06-12 16:19:12 -04:00
cloudix_mcp_server 89725e8e1b chore(ci): remove monolithic docker-build.yaml 2026-06-12 16:19:08 -04:00
jcabillot 0ddda779fb Merge pull request 'ci: add automatic semver tagging on merge to master' (#14) from feat/semver-tag-action into master
Docker Build and Push / lint (push) Successful in 6s
Docker Build and Push / test (push) Successful in 32s
Docker Build and Push / push (push) Failing after 1m18s
Docker Build and Push / build (push) Successful in 56s
Reviewed-on: #14
2026-06-12 13:39:40 -04:00
cloudix_mcp_server 2913b930aa ci: add automatic semver tagging on merge to master
Docker Build and Push / lint (pull_request) Successful in 6s
Docker Build and Push / build (pull_request) Successful in 1m0s
Docker Build and Push / push (pull_request) Has been skipped
Docker Build and Push / test (pull_request) Successful in 25s
2026-06-12 13:22:59 -04:00
jcabillot 7342f704b3 Merge pull request 'chore(config): migrate Renovate config' (#13) from renovate/migrate-config into master
Docker Build and Push / lint (push) Successful in 11s
Docker Build and Push / test (push) Successful in 23s
Docker Build and Push / push (push) Successful in 31s
Docker Build and Push / build (push) Successful in 59s
Reviewed-on: #13
2026-06-09 13:32:59 -04:00
renovate 20d77d22de chore(config): migrate config renovate.json
Docker Build and Push / lint (pull_request) Successful in 8s
Docker Build and Push / build (pull_request) Successful in 1m2s
Docker Build and Push / push (pull_request) Has been skipped
Docker Build and Push / test (pull_request) Successful in 28s
2026-06-09 15:30:55 +00:00
jcabillot efa697d122 Merge pull request 'chore: improve renovate dependency detection' (#12) from chore/renovate into master
Docker Build and Push / lint (push) Failing after 13m13s
Docker Build and Push / test (push) Has been skipped
Docker Build and Push / push (push) Has been skipped
Docker Build and Push / build (push) Successful in 1m4s
Reviewed-on: #12
2026-06-09 11:26:57 -04:00
Sagent 5d86dd68d5 chore: remove redundant configs now handled globally
Docker Build and Push / lint (pull_request) Successful in 9s
Docker Build and Push / build (pull_request) Successful in 2m30s
Docker Build and Push / push (pull_request) Has been skipped
Docker Build and Push / test (pull_request) Successful in 25s
2026-06-09 13:40:36 +00:00
Sagent a8feda02a6 chore: improve renovate dependency detection
Docker Build and Push / lint (pull_request) Successful in 7s
Docker Build and Push / build (pull_request) Failing after 2m8s
Docker Build and Push / push (pull_request) Has been skipped
Docker Build and Push / test (pull_request) Has been skipped
- Disable gitlabci manager (legacy CI, migrated to Gitea Actions)
- Add custom regexManager to detect jcabillot/phpapache base image version from ARG VERSION
2026-06-09 02:20:05 +00:00
jcabillot cdd369630c Merge pull request 'Update hadolint/hadolint-action action to v3.3.0' (#11) from renovate/hadolint-hadolint-action-3.x into master
Docker Build and Push / lint (push) Successful in 12s
Docker Build and Push / test (push) Has been skipped
Docker Build and Push / push (push) Has been skipped
Docker Build and Push / build (push) Failing after 2m11s
Reviewed-on: #11
2026-06-08 15:44:13 -04:00
renovate 11acb639ea Update hadolint/hadolint-action action to v3.3.0
Docker Build and Push / lint (pull_request) Successful in 14s
Docker Build and Push / build (pull_request) Successful in 54s
Docker Build and Push / push (pull_request) Has been skipped
Docker Build and Push / test (pull_request) Successful in 31s
2026-06-08 18:30:21 +00:00
jcabillot 5eef598d4f Merge pull request 'feat: add test' (#10) from feat/test into master
Docker Build and Push / lint (push) Successful in 55s
Docker Build and Push / test (push) Successful in 24s
Docker Build and Push / push (push) Successful in 55s
Docker Build and Push / build (push) Successful in 1m4s
Reviewed-on: #10
2026-06-08 14:22:49 -04:00
Sagent 690859448e fix(test): use Docker bridge gateway for DinD networking
Docker Build and Push / lint (pull_request) Successful in 12s
Docker Build and Push / build (pull_request) Successful in 1m9s
Docker Build and Push / push (pull_request) Has been skipped
Docker Build and Push / test (pull_request) Successful in 29s
2026-06-08 18:19:35 +00:00
Sagent 9da0efa29c fix(test): use --network=host for Docker-in-Docker compatibility
Docker Build and Push / lint (pull_request) Successful in 1m9s
Docker Build and Push / build (pull_request) Successful in 2m20s
Docker Build and Push / push (pull_request) Has been skipped
Docker Build and Push / test (pull_request) Failing after 1m41s
2026-06-08 17:57:50 +00:00
Sagent 268d8d2b62 fix: use container IP instead of port mapping for health check
Docker Build and Push / lint (pull_request) Successful in 13s
Docker Build and Push / build (pull_request) Successful in 1m4s
Docker Build and Push / push (pull_request) Failing after 14m37s
Docker Build and Push / test (pull_request) Failing after 1h7m58s
When running inside Gitea Actions runner (Docker-in-Docker),
127.0.0.1:HOST_PORT doesn't work because the runner container
doesn't have access to the host's port mappings.
Use docker inspect to get the container's direct IP address.
2026-06-08 16:46:13 +00:00
Sagent 97ccaee674 fix: sanitize container name in test script
Docker Build and Push / lint (pull_request) Successful in 54s
Docker Build and Push / build (pull_request) Successful in 1m27s
Docker Build and Push / push (pull_request) Has been skipped
Docker Build and Push / test (pull_request) Failing after 1m37s
Replace : and / with - to comply with Docker container naming rules.
The colon in image:tag format is invalid in container names.
2026-06-08 16:33:31 +00:00
Sagent e858cb9646 fix: pin actions to SHA and use Gitea-compatible artifact actions
Docker Build and Push / lint (pull_request) Successful in 1m6s
Docker Build and Push / build (pull_request) Successful in 2m19s
Docker Build and Push / push (pull_request) Has been skipped
Docker Build and Push / test (pull_request) Failing after 23s
- Pin all actions to commit SHAs for supply chain security
- Replace actions/upload-artifact@v4 with ChristopherHX/gitea-upload-artifact
- Replace actions/download-artifact@v4 with ChristopherHX/gitea-download-artifact
- These forks work on Gitea Actions (GHES-compatible)
2026-06-08 16:25:59 +00:00
Julien Cabillot d5fc87f67b feat: add integration tests and hadolint to CI pipeline
Docker Build and Push / lint (pull_request) Successful in 19s
Docker Build and Push / build (pull_request) Failing after 40s
Docker Build and Push / push (pull_request) Has been skipped
Docker Build and Push / test (pull_request) Has been skipped
2026-06-08 11:34:24 -04:00
Julien Cabillot d8cc2d80b6 feat: add AGENTS.md 2026-06-08 11:07:14 -04:00
jcabillot e18636904b Merge pull request 'feat: add Gitea Actions workflow' (#9) from feat/gitea-actions into master
Docker Build and Push / build (push) Successful in 2m9s
Reviewed-on: #9
2026-05-29 15:04:52 -04:00
Julien Cabillot af820add1a feat: add Gitea Actions workflow
Docker Build and Push / build (pull_request) Successful in 8m43s
2026-05-29 14:46:20 -04:00
Julien Cabillot c5542d0baf feat: add gitea actions
Docker Build and Push / build (push) Successful in 1m43s
2026-05-29 13:26:42 -04:00
11 changed files with 324 additions and 64 deletions

No files matched your search

+53
View File
@@ -0,0 +1,53 @@
name: Nightly Rebuild
on:
schedule:
- cron: '0 0 * * *'
jobs:
hadolint:
runs-on: ubuntu-latest
continue-on-error: true
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
- uses: hadolint/hadolint-action@06be81baf89a55ffd0e24b8f04a4185738dd3387 # v3.5.0
with:
dockerfile: Dockerfile
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
- uses: docker/setup-buildx-action@f87e5991a6d7451dcb8d9637bfbc97413f497069 # v4
- run: docker build -t ci-image:${{ github.sha }} .
- run: bash tests/test.sh ci-image:${{ github.sha }}
build-push:
needs: [test]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
fetch-depth: 0
- uses: docker/setup-buildx-action@f87e5991a6d7451dcb8d9637bfbc97413f497069 # v4
- uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- id: get-latest-tag
run: |
TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
echo "tag=$TAG" >> $GITHUB_OUTPUT
- id: meta
uses: docker/metadata-action@dc802804100637a589fabce1cb79ff13a1411302 # v6
with:
images: jcabillot/ip
tags: |
type=raw,value=${{ steps.get-latest-tag.outputs.tag }}-latest,enable=${{ steps.get-latest-tag.outputs.tag != '' }}
- uses: docker/build-push-action@f9f3042f7e2789586610d6e8b85c8f03e5195baf # v7.2.0
with:
context: .
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
pull: true
+49
View File
@@ -0,0 +1,49 @@
name: Main Release
on:
push:
branches: [master]
jobs:
hadolint:
runs-on: ubuntu-latest
continue-on-error: true
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
- uses: hadolint/hadolint-action@06be81baf89a55ffd0e24b8f04a4185738dd3387 # v3.5.0
with:
dockerfile: Dockerfile
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
- uses: docker/setup-buildx-action@f87e5991a6d7451dcb8d9637bfbc97413f497069 # v4
- run: docker build -t ci-image:${{ github.sha }} .
- run: bash tests/test.sh ci-image:${{ github.sha }}
build:
needs: [test]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
- uses: docker/setup-buildx-action@f87e5991a6d7451dcb8d9637bfbc97413f497069 # v4
- run: docker build -t jcabillot/ip:${{ github.sha }} .
tag:
needs: [build]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
fetch-depth: 0
- name: Configure git auth
run: |
git remote set-url origin "https://x-access-token:${{ secrets.SA_TOKEN_ACTION_PUSH_TAGS }}@scm.cabillot.eu/web/ip.git"
- uses: anothrNick/github-tag-action@4ed44965e0db8dab2b466a16da04aec3cc312fd8 # v1.75.0
env:
GITHUB_TOKEN: ${{ secrets.SA_TOKEN_ACTION_PUSH_TAGS }}
DEFAULT_BUMP: patch
RELEASE_BRANCHES: master
WITH_V: true
GIT_API_TAGGING: false
+22
View File
@@ -0,0 +1,22 @@
name: PR Checks
on:
pull_request:
branches: [master]
jobs:
hadolint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
- uses: hadolint/hadolint-action@06be81baf89a55ffd0e24b8f04a4185738dd3387 # v3.5.0
with:
dockerfile: Dockerfile
build-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
- uses: docker/setup-buildx-action@f87e5991a6d7451dcb8d9637bfbc97413f497069 # v4
- run: docker build -t ci-image:${{ github.sha }} .
- run: bash tests/test.sh ci-image:${{ github.sha }}
+12
View File
@@ -0,0 +1,12 @@
name: Renovate
on:
push:
branches:
- master
workflow_dispatch:
jobs:
renovate:
uses: perso/gitea-pipelines/.gitea/workflows/renovate.yaml@main
secrets: inherit
+67
View File
@@ -0,0 +1,67 @@
name: Tag Release
on:
push:
tags: ['*']
jobs:
hadolint:
runs-on: ubuntu-latest
continue-on-error: true
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
- uses: hadolint/hadolint-action@06be81baf89a55ffd0e24b8f04a4185738dd3387 # v3.5.0
with:
dockerfile: Dockerfile
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
- uses: docker/setup-buildx-action@f87e5991a6d7451dcb8d9637bfbc97413f497069 # v4
- run: docker build -t ci-image:${{ github.sha }} .
- run: bash tests/test.sh ci-image:${{ github.sha }}
build-push:
needs: [test]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
- uses: docker/setup-buildx-action@f87e5991a6d7451dcb8d9637bfbc97413f497069 # v4
- uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- id: meta
uses: docker/metadata-action@dc802804100637a589fabce1cb79ff13a1411302 # v6
with:
images: jcabillot/ip
tags: |
type=ref,event=tag
type=ref,event=tag,suffix=-latest
- uses: docker/build-push-action@f9f3042f7e2789586610d6e8b85c8f03e5195baf # v7.2.0
with:
context: .
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
pull: true
trigger-renovate:
# The deployment repo perso_private/tf-depl-kubernetes pins this image; its
# Renovate instance only scans hourly, so this dispatch opens the image bump
# PR within minutes of the release instead of up to an hour later.
needs: [build-push]
runs-on: ubuntu-latest
steps:
- name: Trigger Renovate on perso_private/tf-depl-kubernetes
# needs: build-push — Renovate reads Docker Hub, so a scan started before
# the push lands would only see the previous release.
# RENOVATE_TOKEN is the org-level secret of this organisation.
run: |
curl -sS -f -X POST \
-u "renovate:${{ secrets.RENOVATE_TOKEN }}" \
-H "Content-Type: application/json" \
-d '{{"ref":"main"}}' \
"https://scm.cabillot.eu/api/v1/repos/perso_private/tf-depl-kubernetes/actions/workflows/renovate.yaml/dispatches"
echo "Renovate dispatched on perso_private/tf-depl-kubernetes"
-23
View File
@@ -1,23 +0,0 @@
image: docker:latest
services:
- docker:dind
before_script:
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
build-master:
stage: build
script:
- docker build --pull -t "$CI_REGISTRY_IMAGE" .
- docker push "$CI_REGISTRY_IMAGE"
only:
- master
build:
stage: build
script:
- docker build --pull -t "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG" .
- docker push "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG"
except:
- master
+31
View File
@@ -0,0 +1,31 @@
# AGENTS.md
## 1. Overview
Lightweight PHP micro-service that returns the client's public IP address as JSON. Containerized with Docker and deployed on Kubernetes.
## 2. Folder Structure
- `root/`: Application source code served by FrankenPHP/Caddy.
- `index.php`: Single endpoint returning `REMOTE_ADDR` as JSON.
- `Caddyfile`: FrankenPHP/Caddy web server configuration — PHP handler on `:8080` with `try_files` + `php_server`.
- `.gitea/workflows/`: Gitea Actions CI pipelines.
- `docker-build.yaml`: Build and push Docker image to Docker Hub on push/PR to master + daily cron.
- `Dockerfile`: Single-stage build from `dunglas/frankenphp:1-php8.5-alpine`, copies `root/` into `/app/public`.
- `.gitlab-ci.yml`: Legacy GitLab CI config (deprecated, replaced by Gitea Actions).
- `Jenkinsfile`: Legacy Jenkins pipeline (deprecated, replaced by Gitea Actions).
## 3. Core Behaviors & Patterns
- **Request/Response Flow**: Single PHP endpoint sets `Content-Type: application/json` header and returns `$_SERVER['REMOTE_ADDR']` encoded as JSON string. No routing, no framework, no state.
- **Container Base Image Pattern**: `Dockerfile` is a single-stage build from a fixed `dunglas/frankenphp:1-php8.5-alpine` tag (Alpine-based FrankenPHP with Caddy). No `ARG VERSION` — the tag is pinned, Renovate auto-detects it. Application code is layered via `COPY root /app/public`. FrankenPHP provides PHP + Caddy pre-configured.
- **Traefik IngressRoute with HTTPS Redirect**: Two IngressRoute resources handle traffic — `ip-websecure` serves HTTPS on the `websecure` entrypoint, `ip-web` catches HTTP on `web` entrypoint and applies a `redirectScheme` middleware for permanent HTTPS redirect. The Service reference in the HTTP IngressRoute is required by Traefik even though the middleware intercepts before reaching it.
- **Health Probes**: Deployment defines both `livenessProbe` and `readinessProbe` using `httpGet` on `/` at the named `http` port (8080). Kubernetes uses these to restart unhealthy pods and exclude unready pods from the Service endpoints.
- **Security Hardening**: Pod spec sets `automountServiceAccountToken: false` to prevent unnecessary Kubernetes API access from the container.
## 4. Conventions
- **Kubernetes Labels**: Pods use `app: "front"` for Service selector matching and `owner: "jcabillot"` for resource attribution. Deployment-level labels use `app: "front"`.
- **Named Ports**: Container port is named `http` (8080) and referenced by name in probes and Service targetPort, avoiding hardcoded port numbers.
- **Docker Image Tagging**: CI uses `docker/metadata-action` to generate tags — `latest` for master branch pushes, branch/PR/SHA tags for other events. Push is skipped on pull requests.
- **CI Secrets**: Docker Hub credentials are stored as Gitea Actions secrets (`DOCKERHUB_USERNAME`, `DOCKERHUB_TOKEN`), never hardcoded.
+11
View File
@@ -0,0 +1,11 @@
{
auto_https off
frankenphp
}
:8080 {
root * /app/public
encode zstd br gzip
try_files {path} /index.php?{query}
php_server
}
+7 -3
View File
@@ -1,5 +1,9 @@
ARG VERSION="latest" FROM dunglas/frankenphp:1-php8.5-alpine
FROM "jcabillot/phpapache:${VERSION}"
LABEL maintainer="Julien Cabillot <dockerimages@cabillot.eu>" LABEL maintainer="Julien Cabillot <dockerimages@cabillot.eu>"
COPY "root" "/var/www/html" WORKDIR /app
COPY Caddyfile /etc/frankenphp/Caddyfile
COPY --chown=www-data:www-data root /app/public
# hadolint ignore=DL3066
USER www-data
Vendored
-38
View File
@@ -1,38 +0,0 @@
pipeline {
environment {
registry = 'https://registry.hub.docker.com'
registryCredential = 'dockerhub_jcabillot'
dockerImage = 'jcabillot/ip'
}
agent any
triggers {
cron('@midnight')
}
stages {
stage('Clone repository') {
steps{
checkout scm
}
}
stage('Build image') {
steps{
sh 'docker build --force-rm=true --no-cache=true --pull -t ${dockerImage} .'
}
}
stage('Deploy Image') {
steps{
script {
withCredentials([usernamePassword(credentialsId: 'dockerhub_jcabillot', usernameVariable: 'DOCKER_USER', passwordVariable: 'DOCKER_PASS')]) {
sh 'docker login --username ${DOCKER_USER} --password ${DOCKER_PASS}'
sh 'docker push ${dockerImage}'
}
}
}
}
}
}
Executable
+72
View File
@@ -0,0 +1,72 @@
#!/usr/bin/env bash
set -euo pipefail
IMAGE="${1:?Usage: test.sh <image>}"
CONTAINER_NAME="test-$(echo "$IMAGE" | tr ':/' '-')-$$"
PASSED=0
FAILED=0
TOTAL=0
cleanup() {
docker rm -f "$CONTAINER_NAME" >/dev/null 2>&1 || true
}
trap cleanup EXIT
assert() {
local name="$1" expected="$2" actual="$3"
TOTAL=$((TOTAL + 1))
if [ "$expected" = "$actual" ]; then
echo " PASS: $name"
PASSED=$((PASSED + 1))
else
echo " FAIL: $name (expected: '$expected', got: '$actual')"
FAILED=$((FAILED + 1))
fi
}
assert_match() {
local name="$1" pattern="$2" actual="$3"
TOTAL=$((TOTAL + 1))
if echo "$actual" | grep -qE "$pattern"; then
echo " PASS: $name"
PASSED=$((PASSED + 1))
else
echo " FAIL: $name (pattern: '$pattern', got: '$actual')"
FAILED=$((FAILED + 1))
fi
}
echo "Running container: $IMAGE"
docker run -d --name "$CONTAINER_NAME" -p 8080:8080 "$IMAGE" >/dev/null
DOCKER_GW=$(docker network inspect bridge --format '{{range .IPAM.Config}}{{.Gateway}}{{end}}')
BASE_URL="http://${DOCKER_GW}:8080"
echo "Waiting for container on ${DOCKER_GW}:8080..."
for i in $(seq 1 30); do
if curl -sf "$BASE_URL/" >/dev/null 2>&1; then
echo "Container ready after ${i}s"
break
fi
if [ "$i" -eq 30 ]; then
echo "FAIL: Container did not become ready within 30s"
docker logs "$CONTAINER_NAME"
exit 1
fi
sleep 1
done
echo ""
echo "Test: GET /"
RESPONSE=$(curl -sf -D - "$BASE_URL/")
STATUS=$(echo "$RESPONSE" | head -1 | grep -oP '\d{3}')
CONTENT_TYPE=$(echo "$RESPONSE" | grep -i 'content-type' | tr -d '\r' | cut -d: -f2- | xargs)
BODY=$(echo "$RESPONSE" | tail -1)
assert "HTTP status is 200" "200" "$STATUS"
assert_match "Content-Type is application/json" "application/json" "$CONTENT_TYPE"
assert_match "Body contains valid IP" '^(\"[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\"|\"[0-9a-fA-F:]+\")$' "$BODY"
echo ""
echo "Results: $PASSED/$TOTAL passed, $FAILED failed"
[ "$FAILED" -eq 0 ]