All checks were successful
multi-semantic-release / multi-semantic-release (push) Successful in 32s
72 lines
2.8 KiB
YAML
72 lines
2.8 KiB
YAML
name: multi-semantic-release
|
|
|
|
# This monorepo only tags releases from the main branch
|
|
on:
|
|
push:
|
|
branches:
|
|
- 'main'
|
|
|
|
jobs:
|
|
multi-semantic-release:
|
|
runs-on: docker
|
|
container:
|
|
image: forgejo.mixinet.net/oci/multi-semantic-release:latest
|
|
steps:
|
|
- name: Checkout the repo
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Generate multi-semantic-release configuration
|
|
shell: sh
|
|
run: |
|
|
# Get the list of images to work with (the folders that have a Dockerfile)
|
|
images="$(for img in */Dockerfile; do dirname "$img"; done)"
|
|
# Generate a values.yaml file for the main packages.json file
|
|
package_json_values_yaml=".package.json-values.yaml"
|
|
echo "images:" >"$package_json_values_yaml"
|
|
for img in $images; do
|
|
echo " - $img" >>"$package_json_values_yaml";
|
|
done
|
|
echo "::group::Generated values.yaml for the project"
|
|
cat "$package_json_values_yaml"
|
|
echo "::endgroup::"
|
|
# Generate the package.json file validating that is a good json file with jq
|
|
tmpl -f "$package_json_values_yaml" ".forgejo/package.json.tmpl" | jq . > "package.json"
|
|
echo "::group::Generated package.json for the project"
|
|
cat "package.json"
|
|
echo "::endgroup::"
|
|
# Remove the temporary values file
|
|
rm -f "$package_json_values_yaml"
|
|
# Generate the package.json file for each image
|
|
for img in $images; do
|
|
tmpl -v "img_name=$img" -v "img_path=$img" ".forgejo/ws-package.json.tmpl" | jq . > "$img/package.json"
|
|
echo "::group::Generated package.json for the '$img' image"
|
|
cat "$img/package.json"
|
|
echo "::endgroup::"
|
|
done
|
|
|
|
- name: Run multi-semantic-release
|
|
shell: sh
|
|
run: |
|
|
multi-semantic-release | tee .multi-semantic-release.log
|
|
|
|
- name: Trigger builds
|
|
shell: sh
|
|
run: |
|
|
# Get the list of tags published on the previous steps
|
|
tags="$(
|
|
sed -n -e 's/^\[.*\] \[\(.*\)\] .* Published release \([0-9]\+\.[0-9]\+\.[0-9]\+\) on .*$/\1-v\2/p' \
|
|
.multi-semantic-release.log
|
|
)"
|
|
rm -f .multi-semantic-release.log
|
|
if [ "$tags" ]; then
|
|
# Prepare the url for building the images
|
|
workflow="build-image-from-tag.yaml"
|
|
dispatch_url="${{ github.api_url }}/repos/${{ github.repository }}/actions/workflows/$workflow/dispatches"
|
|
echo "$tags" | while read -r tag; do
|
|
echo "Triggering build for tag '$tag'"
|
|
curl \
|
|
-H "Content-Type:application/json" \
|
|
-H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
|
|
-d "{\"ref\":\"$tag\"}" "$dispatch_url"
|
|
done
|
|
fi
|