-
Notifications
You must be signed in to change notification settings - Fork 0
121 lines (110 loc) · 3.81 KB
/
release.yml
File metadata and controls
121 lines (110 loc) · 3.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
name: Release
on:
push:
tags:
- 'v*.*.*'
env:
IMAGE: ghcr.io/scalecommerce/docker-php-cli
jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: write
packages: write
steps:
- uses: actions/checkout@v4
- name: Derive versions from tag
id: v
run: |
FULL="${GITHUB_REF_NAME#v}"
if ! [[ "$FULL" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "::error::tag must be vX.Y.Z (got $GITHUB_REF_NAME)"
exit 1
fi
MAJOR="${FULL%.*}"
# PHP major -> Alpine branch. Keep in sync with build-local.sh.
case "$MAJOR" in
8.2) ALPINE=3.22 ;;
8.3|8.4|8.5) ALPINE=3.23 ;;
*) echo "::error::unsupported PHP version $MAJOR"; exit 1 ;;
esac
{
echo "full=$FULL"
echo "major=$MAJOR"
echo "alpine=$ALPINE"
} >> "$GITHUB_OUTPUT"
- uses: docker/setup-qemu-action@v3
- uses: docker/setup-buildx-action@v3
- uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push (multi-arch)
uses: docker/build-push-action@v6
with:
context: .
platforms: linux/amd64,linux/arm64
push: true
build-args: |
ALPINE_VERSION=${{ steps.v.outputs.alpine }}
PHP_VERSION=${{ steps.v.outputs.major }}
tags: |
${{ env.IMAGE }}:${{ steps.v.outputs.full }}
${{ env.IMAGE }}:${{ steps.v.outputs.major }}
labels: |
org.opencontainers.image.version=${{ steps.v.outputs.full }}
org.opencontainers.image.source=https://github.com/${{ github.repository }}
- name: Verify published image contains the tagged PHP version
run: |
docker pull "$IMAGE:${{ steps.v.outputs.full }}"
ACTUAL=$(docker run --rm "$IMAGE:${{ steps.v.outputs.full }}" php -r 'echo PHP_VERSION;')
if [[ "$ACTUAL" != "${{ steps.v.outputs.full }}" ]]; then
echo "::error::tag is ${{ steps.v.outputs.full }} but image contains PHP $ACTUAL — Alpine bumped the patch between your local build and CI. Delete this tag and re-release with the new version."
exit 1
fi
- name: Extract versions.txt and extensions.txt
id: info
run: |
{
echo 'versions<<VERSIONS_EOF'
docker run --rm "$IMAGE:${{ steps.v.outputs.full }}" cat /opt/versions.txt
echo 'VERSIONS_EOF'
} >> "$GITHUB_OUTPUT"
{
echo 'extensions<<EXTENSIONS_EOF'
docker run --rm "$IMAGE:${{ steps.v.outputs.full }}" cat /opt/extensions.txt
echo 'EXTENSIONS_EOF'
} >> "$GITHUB_OUTPUT"
- name: Build release body
env:
VERSION: ${{ steps.v.outputs.full }}
MAJOR: ${{ steps.v.outputs.major }}
VERSIONS_TXT: ${{ steps.info.outputs.versions }}
EXTENSIONS_TXT: ${{ steps.info.outputs.extensions }}
run: |
{
echo '## Pull this version'
echo ''
echo '```'
echo "docker pull $IMAGE:$VERSION"
echo "docker pull $IMAGE:$MAJOR"
echo '```'
echo ''
echo '## Versions'
echo ''
echo '```'
echo "$VERSIONS_TXT"
echo '```'
echo ''
echo '## PHP extensions'
echo ''
echo '```'
echo "$EXTENSIONS_TXT"
echo '```'
} > release-body.md
cat release-body.md
- name: Create GitHub release
uses: softprops/action-gh-release@v2
with:
body_path: release-body.md