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