Convert CI/CD from the artifact upload/download pattern to the standard htpasswd 4-workflow pattern. This removes all use of docker save/docker load + ChristopherHX/gitea-upload-artifact/gitea-download-artifact intermediaries.
Changes
main.yaml — Push to master:
Added hadolint lint job (continue-on-error)
test builds image directly (no artifact dependency)
build builds jcabillot/cv:${{ github.sha }}, no push
tag uses github-tag-action with SA_TOKEN_ACTION_PUSH_TAGS for git auth
build-push logs into Docker Hub, gets latest tag via git describe, generates metadata, builds and pushes with vX.Y.Z-latest tag
pr.yaml — PR checks:
Simplified: parallel hadolint and build-test, no artifact dependency
tag.yaml — Tag release (v*):
Added hadolint lint job (continue-on-error)
test builds image directly
build-push logs into Docker Hub, generates metadata from tag ref, builds and pushes both vX.Y.Z and vX.Y.Z-latest tags
Key improvements
No artifact upload/download — each job builds what it needs
docker/metadata-action for clean tag generation
docker/build-push-action for combined build+push
docker/setup-buildx-action for modern builder environment
continue-on-error: true on hadolint so linting never blocks CI
## Summary
Convert CI/CD from the artifact upload/download pattern to the standard **htpasswd 4-workflow pattern**. This removes all use of `docker save`/`docker load` + `ChristopherHX/gitea-upload-artifact`/`gitea-download-artifact` intermediaries.
### Changes
**main.yaml** — Push to master:
- Added `hadolint` lint job (continue-on-error)
- `test` builds image directly (no artifact dependency)
- `build` builds `jcabillot/cv:${{ github.sha }}`, no push
- `tag` uses `github-tag-action` with `SA_TOKEN_ACTION_PUSH_TAGS` for git auth
**cron.yaml** — Nightly rebuild (preserves original `0 0 * * *` schedule):
- Added `hadolint` lint job (continue-on-error)
- `test` builds image directly
- `build-push` logs into Docker Hub, gets latest tag via `git describe`, generates metadata, builds and pushes with `vX.Y.Z-latest` tag
**pr.yaml** — PR checks:
- Simplified: parallel `hadolint` and `build-test`, no artifact dependency
**tag.yaml** — Tag release (`v*`):
- Added `hadolint` lint job (continue-on-error)
- `test` builds image directly
- `build-push` logs into Docker Hub, generates metadata from tag ref, builds and pushes both `vX.Y.Z` and `vX.Y.Z-latest` tags
### Key improvements
- No artifact upload/download — each job builds what it needs
- `docker/metadata-action` for clean tag generation
- `docker/build-push-action` for combined build+push
- `docker/setup-buildx-action` for modern builder environment
- `continue-on-error: true` on hadolint so linting never blocks CI
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
Convert CI/CD from the artifact upload/download pattern to the standard htpasswd 4-workflow pattern. This removes all use of
docker save/docker load+ChristopherHX/gitea-upload-artifact/gitea-download-artifactintermediaries.Changes
main.yaml — Push to master:
hadolintlint job (continue-on-error)testbuilds image directly (no artifact dependency)buildbuildsjcabillot/cv:${{ github.sha }}, no pushtagusesgithub-tag-actionwithSA_TOKEN_ACTION_PUSH_TAGSfor git authcron.yaml — Nightly rebuild (preserves original
0 0 * * *schedule):hadolintlint job (continue-on-error)testbuilds image directlybuild-pushlogs into Docker Hub, gets latest tag viagit describe, generates metadata, builds and pushes withvX.Y.Z-latesttagpr.yaml — PR checks:
hadolintandbuild-test, no artifact dependencytag.yaml — Tag release (
v*):hadolintlint job (continue-on-error)testbuilds image directlybuild-pushlogs into Docker Hub, generates metadata from tag ref, builds and pushes bothvX.Y.ZandvX.Y.Z-latesttagsKey improvements
docker/metadata-actionfor clean tag generationdocker/build-push-actionfor combined build+pushdocker/setup-buildx-actionfor modern builder environmentcontinue-on-error: trueon hadolint so linting never blocks CI