1919 IMAGE_NAME : ${{ github.repository }}
2020
2121jobs :
22- build :
22+ # PR validation: build and smoke-test only, no registry access
23+ validate :
24+ if : github.event_name == 'pull_request'
2325 runs-on : ubuntu-latest
2426 permissions :
2527 contents : read
26- # Only allow package writes for pushes to main/tags, not PRs
27- packages : ${{ github.event_name != 'pull_request' && 'write' || 'read' }}
28+
29+ steps :
30+ - name : Checkout
31+ uses : actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
32+
33+ - name : Set up QEMU
34+ uses : docker/setup-qemu-action@ce360397dd3f832beb865e1373c09c0e9f86d70a # v4.0.0
35+
36+ - name : Set up Docker Buildx
37+ uses : docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd # v4.0.0
38+
39+ - name : Build multi-arch (no push)
40+ uses : docker/build-push-action@d08e5c354a6adb9ed34480a06d141179aa583294 # v7.0.0
41+ with :
42+ context : .
43+ platforms : linux/amd64,linux/arm64
44+ push : false
45+ build-args : |
46+ VERSION=test
47+ COMMIT=${{ github.sha }}
48+ BUILD_DATE=${{ github.event.head_commit.timestamp }}
49+ cache-from : type=gha
50+ cache-to : type=gha,mode=max
51+
52+ - name : Smoke test (amd64)
53+ run : |
54+ docker buildx build \
55+ --platform linux/amd64 \
56+ --load \
57+ --tag msgvault:test \
58+ --build-arg VERSION=test \
59+ --build-arg COMMIT=$(echo $GITHUB_SHA | cut -c1-8) \
60+ --build-arg BUILD_DATE=$(date -u +%Y-%m-%dT%H:%M:%SZ) \
61+ .
62+
63+ docker run --rm msgvault:test version
64+ docker run --rm msgvault:test --help
65+
66+ mkdir -p /tmp/msgvault-test && chmod 777 /tmp/msgvault-test
67+ docker run --rm -v /tmp/msgvault-test:/data msgvault:test init-db
68+ test -f /tmp/msgvault-test/msgvault.db || { echo "FATAL: database not created"; exit 1; }
69+ rm -rf /tmp/msgvault-test
70+
71+ # Publish: build multi-arch and push to GHCR (main/tags only)
72+ publish :
73+ if : github.event_name != 'pull_request'
74+ runs-on : ubuntu-latest
75+ permissions :
76+ contents : read
77+ packages : write
2878
2979 steps :
3080 - name : Checkout
3787 uses : docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd # v4.0.0
3888
3989 - name : Log in to Container Registry
40- if : github.event_name != 'pull_request'
4190 uses : docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4.1.0
4291 with :
4392 registry : ${{ env.REGISTRY }}
76125 with :
77126 context : .
78127 platforms : linux/amd64,linux/arm64
79- push : ${{ github.event_name != 'pull_request' }}
128+ push : true
80129 tags : ${{ steps.meta.outputs.tags }}
81130 labels : ${{ steps.meta.outputs.labels }}
82131 build-args : |
@@ -85,34 +134,3 @@ jobs:
85134 BUILD_DATE=${{ steps.build_args.outputs.build_date }}
86135 cache-from : type=gha
87136 cache-to : type=gha,mode=max
88-
89- - name : Test image (amd64)
90- if : github.event_name == 'pull_request'
91- run : |
92- # Build single-arch for testing
93- docker buildx build \
94- --platform linux/amd64 \
95- --load \
96- --tag msgvault:test \
97- --build-arg VERSION=test \
98- --build-arg COMMIT=$(echo $GITHUB_SHA | cut -c1-8) \
99- --build-arg BUILD_DATE=$(date -u +%Y-%m-%dT%H:%M:%SZ) \
100- .
101-
102- # Smoke test: version command
103- echo "--- Version test ---"
104- docker run --rm msgvault:test version
105-
106- # Smoke test: help command
107- echo "--- Help test ---"
108- docker run --rm msgvault:test --help
109-
110- # Smoke test: init-db (creates database)
111- echo "--- Init DB test ---"
112- mkdir -p /tmp/msgvault-test && chmod 777 /tmp/msgvault-test
113- docker run --rm -v /tmp/msgvault-test:/data msgvault:test init-db
114- test -f /tmp/msgvault-test/msgvault.db || { echo "FATAL: database not created"; exit 1; }
115- echo "Database created successfully"
116-
117- # Cleanup
118- rm -rf /tmp/msgvault-test
0 commit comments