Skip to content

Commit 159efac

Browse files
committed
Added ability to tag releases by GitHub Version (Fixes #323)
1 parent d46ade4 commit 159efac

3 files changed

Lines changed: 26 additions & 12 deletions

File tree

.github/workflows/service_docker-build-and-publish.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ jobs:
112112
DOCKER_TAG_PREFIX: ${{ inputs.tag-prefix }}
113113
DOCKER_REGISTRY_REPOSITORIES: ${{ inputs.registry-repositories }}
114114
RELEASE_TYPE: ${{ inputs.release-type }}
115+
GITHUB_RELEASE_TAG: ${{ github.ref }}
115116

116117
- name: Set REPOSITORY_BUILD_VERSION
117118
id: set_version

docs/content/docs/2.getting-started/2.installation.md

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ If you use `latest`, you will always get the latest stable version of the CLI va
6868
label: The Full Image Tag Standard
6969
---
7070
```bash
71-
{{registry-url}}/serversideup/php:{{release-prefix}}-{{php-version}}-{{variation-name}}-{{operating-system}}
71+
{{registry-url}}/serversideup/php:{{release-prefix}}-{{php-version}}-{{variation-name}}-{{operating-system}}-{{github-release-version}}
7272
```
7373
::
7474

@@ -85,16 +85,18 @@ ghcr.io/serversideup/php:8.3-fpm-nginx
8585

8686
::code-panel
8787
---
88-
label: 8.1.16 running FPM + Apache on Alpine from DockerHub
88+
label: PHP 8.1.16, running FPM + Apache on Alpine from DockerHub, locked into our v3.0.0 GitHub Release
8989
---
9090
```bash
91-
serversideup/php:8.1.16-fpm-apache-alpine
91+
serversideup/php:8.1.16-fpm-apache-alpine-v3.0.0
9292
```
9393
::
9494

95+
In this example, we can lock into the `v3.0.0` release of our image. This is useful if you want to ensure there are no automatic changes that could break your CI process. [View our releases →](https://github.com/serversideup/docker-php/releases)
96+
9597
::code-panel
9698
---
97-
label: Beta version (of this repository, not PHP) running PHP CLI 8.x
99+
label: Latest beta version (of this repository, not PHP) running PHP CLI 8.x
98100
---
99101
```bash
100102
serversideup/php:beta-8

scripts/assemble-docker-tags.sh

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/bin/bash
22
###################################################
3-
# Usage: assemble-docker-tags.sh [--variation <variation> --os <os> --patch-version <patch-version> --latest]
3+
# Usage: assemble-docker-tags.sh --variation <variation> --os <os> --patch-version <patch-version> [--stable-release --github-release-tag <tag>]
44
###################################################
55
# This scripts dives deep into the advanced logic of assembling Docker tags for GitHub Actions.
66
# If $CI is "true", it outputs the tags to GITHUB_ENV for use in subsequent steps.
@@ -104,6 +104,12 @@ add_docker_tag() {
104104

105105
# Trim commas for a better output
106106
echo_color_message blue "🐳 Set tag: ${tag_name//,} "
107+
108+
if [[ -n "$GITHUB_RELEASE_TAG" ]]; then
109+
DOCKER_TAGS+=",$tag_name-$GITHUB_RELEASE_TAG"
110+
echo_color_message blue "🐳 Set tag: ${tag_name//,}-$GITHUB_RELEASE_TAG"
111+
fi
112+
107113
done
108114
}
109115

@@ -136,7 +142,7 @@ function is_default_variation() {
136142
}
137143

138144
help_menu() {
139-
echo "Usage: $0 [--variation <variation> --os <os> --patch-version <patch-version> --latest]"
145+
echo "Usage: $0 --variation <variation> --os <os> --patch-version <patch-version> [--stable-release --github-release-tag <tag>]"
140146
echo
141147
echo "This script dives deep into the advanced logic of assembling Docker tags for GitHub Actions."
142148
echo "If \$CI is 'true', it outputs the tags to GITHUB_ENV for use in subsequent steps."
@@ -147,6 +153,7 @@ help_menu() {
147153
echo " --variation <variation> Set the PHP variation (e.g., apache, fpm)"
148154
echo " --os <os> Set the base OS (e.g., bullseye, bookworm, alpine)"
149155
echo " --patch-version <patch-version> Set the PHP patch version (e.g., 7.4.10)"
156+
echo " --github-release-tag <tag> Set the GitHub release tag"
150157
echo " --stable-release Flag the tags for a stable release"
151158
echo
152159
echo "Environment Variables (Defaults):"
@@ -173,6 +180,10 @@ while [[ $# -gt 0 ]]; do
173180
PHP_BUILD_VERSION="$2"
174181
shift 2
175182
;;
183+
--github-release-tag)
184+
GITHUB_RELEASE_TAG="$2"
185+
shift 2
186+
;;
176187
--stable-release)
177188
RELEASE_TYPE="stable"
178189
shift
@@ -212,12 +223,12 @@ build_major_version="${build_patch_version%%.*}"
212223
build_minor_version="${build_patch_version%.*}"
213224

214225
# Fetch version data from the PHP Versions file
215-
latest_global_stable_major=$(yq -o=json $PHP_VERSIONS_FILE | jq -r '[.php_versions[] | select(.major | test("-rc") | not) | .major | tonumber] | max | tostring')
216-
latest_global_stable_minor=$(yq -o=json $PHP_VERSIONS_FILE | jq -r --arg latest_global_stable_major "$latest_global_stable_major" '.php_versions[] | select(.major == $latest_global_stable_major) | .minor_versions | map(select(.minor | test("-rc") | not) | .minor | split(".") | .[1] | tonumber) | max | $latest_global_stable_major + "." + tostring')
217-
latest_minor_within_build_major=$(yq -o=json $PHP_VERSIONS_FILE | jq -r --arg build_major "$build_major_version" '.php_versions[] | select(.major == $build_major) | .minor_versions | map(select(.minor | test("-rc") | not) | .minor | split(".") | .[1] | tonumber) | max | $build_major + "." + tostring')
218-
latest_patch_within_build_minor=$(yq -o=json $PHP_VERSIONS_FILE | jq -r --arg build_minor "$build_minor_version" '.php_versions[] | .minor_versions[] | select(.minor == $build_minor) | .patch_versions | map( split(".") | map(tonumber) ) | max | join(".")')
219-
latest_patch_global=$(yq -o=json $PHP_VERSIONS_FILE | jq -r '[.php_versions[] | .minor_versions[] | select(.minor | test("-rc") | not) | .patch_versions[] | select(test("-rc") | not) | split(".") | map(tonumber) ] | max | join(".")')
220-
default_base_os_within_build_minor=$(yq -o=json $PHP_VERSIONS_FILE | jq -r --arg build_minor "$build_minor_version" '.php_versions[] | .minor_versions[] | select(.minor == $build_minor) | .base_os[] | select(.default == true) | .name')
226+
latest_global_stable_major=$(yq -o=json "$PHP_VERSIONS_FILE" | jq -r '[.php_versions[] | select(.major | test("-rc") | not) | .major | tonumber] | max | tostring')
227+
latest_global_stable_minor=$(yq -o=json "$PHP_VERSIONS_FILE" | jq -r --arg latest_global_stable_major "$latest_global_stable_major" '.php_versions[] | select(.major == $latest_global_stable_major) | .minor_versions | map(select(.minor | test("-rc") | not) | .minor | split(".") | .[1] | tonumber) | max | $latest_global_stable_major + "." + tostring')
228+
latest_minor_within_build_major=$(yq -o=json "$PHP_VERSIONS_FILE" | jq -r --arg build_major "$build_major_version" '.php_versions[] | select(.major == $build_major) | .minor_versions | map(select(.minor | test("-rc") | not) | .minor | split(".") | .[1] | tonumber) | max | $build_major + "." + tostring')
229+
latest_patch_within_build_minor=$(yq -o=json "$PHP_VERSIONS_FILE" | jq -r --arg build_minor "$build_minor_version" '.php_versions[] | .minor_versions[] | select(.minor == $build_minor) | .patch_versions | map( split(".") | map(tonumber) ) | max | join(".")')
230+
latest_patch_global=$(yq -o=json "$PHP_VERSIONS_FILE" | jq -r '[.php_versions[] | .minor_versions[] | select(.minor | test("-rc") | not) | .patch_versions[] | select(test("-rc") | not) | split(".") | map(tonumber) ] | max | join(".")')
231+
default_base_os_within_build_minor=$(yq -o=json "$PHP_VERSIONS_FILE" | jq -r --arg build_minor "$build_minor_version" '.php_versions[] | .minor_versions[] | select(.minor == $build_minor) | .base_os[] | select(.default == true) | .name')
221232

222233
check_vars \
223234
"🚨 Missing critical build variable. Check the script logic and logs" \

0 commit comments

Comments
 (0)