Archive non-GCP workflows, rename GCP variants to drop -gcp suffix, replace Gitea-hosted aws-cli-action with aws-actions/configure-aws-credentials@v4.
7.2 KiB
Spec: Migrate Workflows to GitHub Actions
Change: 260406-vhk4-migrate-workflows-github-actions Created: 2026-04-06 Affected memory: None
Non-Goals
- Enabling Grype vulnerability scanning — intentionally left disabled
- Modifying non-GCP workflows (
pr-lint-and-check.yml,push-code-test.yml,push-code-scan.yml,push-npm.yml,push-npm-from-container.yml) - Changing the GCP authentication pattern (secrets/vars remain identical)
- Updating consuming repos'
uses:references (out of scope for this repo)
Workflows: Archive Non-GCP Variants
Requirement: Archive legacy workflows
The system SHALL move the 4 non-GCP workflow files to .github/workflows/archive/ to preserve history without cluttering the active workflows directory.
Files to archive:
.github/workflows/base-build-image.yml.github/workflows/dispatch-container-base.yml.github/workflows/push-container.yml.github/workflows/push-s3.yml
Scenario: Archive directory creation and file move
- GIVEN the 4 non-GCP workflow files exist in
.github/workflows/ - WHEN the migration is applied
- THEN
.github/workflows/archive/directory SHALL exist - AND all 4 files SHALL be moved to
.github/workflows/archive/with identical filenames - AND the files SHALL no longer exist in
.github/workflows/
Workflows: Rename GCP Variants
Requirement: Drop -gcp suffix from workflow filenames
The system SHALL rename the 4 GCP workflow files to remove the -gcp suffix, making them the canonical workflow files.
| Current name | New name |
|---|---|
base-build-image-gcp.yml |
base-build-image.yml |
dispatch-container-base-gcp.yml |
dispatch-container-base.yml |
push-container-gcp.yml |
push-container.yml |
push-s3-gcp.yml |
push-s3.yml |
Scenario: Rename after archive
- GIVEN the non-GCP files have been archived (no naming collision)
- WHEN the GCP files are renamed
- THEN each
-gcp.ymlfile SHALL be renamed to the corresponding base name - AND the original
-gcp.ymlfiles SHALL no longer exist - AND the file contents SHALL be unchanged (rename only, no content modification at this stage)
Workflows: Fix S3 Upload Action
Requirement: Replace Gitea-hosted aws-cli-action
The push-s3.yml workflow (formerly push-s3-gcp.yml) SHALL replace the Gitea-hosted action reference with the aws-actions/configure-aws-credentials@v4 action plus an inline aws s3 cp command, matching the pattern established in the dg2n-core repo.
Scenario: AWS credentials configuration
- GIVEN
push-s3.ymlhas been renamed frompush-s3-gcp.yml - WHEN the S3 upload steps are updated
- THEN the
Upload cloud filesstep usinghttps://git.gmetri.io/gmetribin/aws-cli-action@v1.0.0SHALL be replaced with two steps:- A
Configure AWS credentialsstep usingaws-actions/configure-aws-credentials@v4with:aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}aws-region: ${{ vars.AWS_DEFAULT_REGION }}
- An
Upload cloud filesstep usingrun:with inlineaws s3 cpcommand
- A
Scenario: AWS secret/var name casing
- GIVEN the current workflow uses lowercase secret names (
secrets.aws_access_key_id, etc.) - WHEN the S3 steps are replaced
- THEN all AWS secret and variable references SHALL use uppercase names:
secrets.AWS_ACCESS_KEY_ID(wassecrets.aws_access_key_id)secrets.AWS_SECRET_ACCESS_KEY(wassecrets.aws_secret_access_key)vars.AWS_DEFAULT_REGION(wasvars.aws_default_region)vars.AWS_UPLOAD_BUCKET(wasvars.aws_upload_bucket)
Scenario: S3 upload command equivalence
- GIVEN the old action ran
s3 cp --recursive --cache-control max-age=31536000 --storage-class 'STANDARD_IA' cloud/ s3://{bucket}/{repo}/{build_id} - WHEN the inline command replaces it
- THEN the
aws s3 cpcommand SHALL preserve all flags:--recursive,--cache-control max-age=31536000,--storage-class STANDARD_IA - AND the destination path SHALL remain
s3://${{ vars.AWS_UPLOAD_BUCKET }}/${{ env.REPO_SHORT_NAME }}/${{ steps.get-id.outputs.BUILD_ID }}
Workflows: Preserve Existing Behavior
Requirement: No functional changes to GCP auth
All 4 renamed workflows SHALL retain their existing GCP authentication steps unchanged:
google-github-actions/auth@v2withcredentials_json: ${{ secrets.GCP_SA_KEY }}google-github-actions/setup-gcloud@v2withproject_id: ${{ vars.GCP_PROJECT_ID }}gcloud auth configure-docker ${{ vars.GCP_REGION }}-docker.pkg.dev
Scenario: GCP auth preserved after rename
- GIVEN any of the 4 renamed workflow files
- WHEN the file content is inspected
- THEN the GCP auth steps SHALL be identical to the original
-gcpvariant
Requirement: Runners use GitHub-hosted ubuntu-22.04
All workflows SHALL use runs-on: ubuntu-22.04 (GitHub-hosted runners). No self-hosted runner references.
Scenario: Runner specification
- GIVEN any workflow file in
.github/workflows/(excluding archive) - WHEN the
runs-onvalue is inspected - THEN it SHALL be
ubuntu-22.04
Requirement: Grype scanning remains disabled
All workflows SHALL keep Grype vulnerability scanning commented out. No uncommented anchore/scan-action steps.
Scenario: Grype stays commented
- GIVEN any workflow that previously had Grype scanning commented out
- WHEN the migration is complete
- THEN the Grype scanning steps SHALL remain commented out
Assumptions
| # | Grade | Decision | Rationale | Scores |
|---|---|---|---|---|
| 1 | Certain | Non-GCP workflows archived to .github/workflows/archive/, not deleted |
Confirmed from intake #1 — user explicit | S:95 R:90 A:95 D:90 |
| 2 | Certain | GCP workflows renamed to drop -gcp suffix |
Confirmed from intake #2 — user explicit | S:95 R:85 A:90 D:85 |
| 3 | Certain | Grype scanning stays disabled (commented out) | Confirmed from intake #3 — user explicit | S:95 R:90 A:95 D:95 |
| 4 | Certain | Use aws-actions/configure-aws-credentials@v4 + inline aws s3 cp |
Confirmed from intake #4 — matches dg2n-core reference | S:95 R:90 A:90 D:85 |
| 5 | Certain | AWS secret/var names uppercased to match dg2n-core | Confirmed from intake #5 — user said dg2n-core is correct | S:90 R:85 A:90 D:85 |
| 6 | Certain | GitHub-hosted ubuntu-22.04 runners |
Confirmed from intake #6 — already the value in all workflows | S:95 R:90 A:95 D:90 |
| 7 | Certain | S3 upload hybrid (GCP Docker + AWS S3) stays as-is | Confirmed from intake #7 — user explicit | S:90 R:85 A:90 D:90 |
| 8 | Certain | Other 5 workflows unchanged | Upgraded from intake #8 Confident — user confirmed explicitly | S:90 R:85 A:90 D:85 |
| 9 | Confident | Archive folder path is .github/workflows/archive/ |
Carried from intake #9 — user said "archive folder", path is reasonable convention | S:80 R:85 A:85 D:80 |
| 10 | Certain | Archive must happen before rename to avoid filename collisions | Ordering constraint derived from spec — both old and new files share the same base names | S:95 R:95 A:95 D:95 |
10 assumptions (9 certain, 1 confident, 0 tentative, 0 unresolved).