Skip to content

Automated release

Automated release #3

name: Automated release
on:
workflow_dispatch:
schedule:
# First day of every month
- cron: '0 0 1 * *'
jobs:
setup:
runs-on: ubuntu-latest
outputs:
latest_branch: ${{steps.latest_branch.outputs.latest_branch}}
branches_json: ${{steps.release_branches.outputs.branches_json}}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Get latest llvm_release branch
id: latest_branch
run: |
git branch -r \
| grep 'llvm_release_' \
| sed -E 's/.*\/llvm_release_([0-9]+)/\1/' \
| sort -n -r \
| head -1 \
| xargs printf "latest_branch=llvm_release_%s" \
>> $GITHUB_OUTPUT
- name: Get branch list
id: release_branches
run: |
git branch -r \
| grep "origin/llvm_release_" \
| sed -E 's/\ *origin\/([^\ ]*)/\"\1\"/' \
| paste -sd',' \
| xargs -0 -d"\n" printf 'branches_json={"branch":[%s]}' \
>> $GITHUB_OUTPUT
release:
runs-on: ubuntu-latest
needs: setup
strategy:
matrix: ${{fromJson(needs.setup.outputs.branches_json)}}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
ref: ${{ matrix.branch }}
fetch-depth: 0
- name: Get commits info
id: versions
run: |
export LATEST_VERSION=\
"$(git describe --tags --abbrev=0 --match 'v*')"
export LLVM_VERSION=$(echo $LATEST_VERSION \
| sed -E 's/(v[0-9]+\.[0-9]+)\.([0-9]+).*/\1/')
export PATCH=$(echo $LATEST_VERSION \
| sed -E 's/(v[0-9]+\.[0-9]+)\.([0-9]+).*/\2/')
echo "llvm_version=$LLVM_VERSION" >> $GITHUB_OUTPUT
echo "patch=$PATCH" >> $GITHUB_OUTPUT
echo "latest_version=${LATEST_VERSION}" >> $GITHUB_OUTPUT
echo "release_version=${LLVM_VERSION}.$((${PATCH}+1))" \
>> $GITHUB_OUTPUT
git rev-list ${LATEST_VERSION}..HEAD --count \
| xargs printf "commits_since_last_release=%d\n" >> $GITHUB_OUTPUT
git rev-parse HEAD | xargs printf "last_commit=%s\n" >> $GITHUB_OUTPUT
- name: Release
uses: softprops/action-gh-release@v2
if: ${{ steps.versions.outputs.commits_since_last_release != 0 }}
with:
# Setting tag to have format:
# %latest llvm version%.%latest patch + 1%
tag_name: ${{ steps.versions.outputs.release_version }}
# We have to set this so tag is set on the branch we are releasing
target_commitish: ${{ steps.versions.outputs.last_commit }}
# We don't want to mark patch releases latest unless it is latest
# major version
make_latest: >-
${{ needs.setup.outputs.latest_branch == matrix.branch }}
name: >
SPIR-V LLVM translator based on LLVM
${{ steps.versions.outputs.llvm_version }}
body: "Full Changelog: ${{ github.server_url }}/\
${{ github.repository }}/compare/\
${{ steps.versions.outputs.latest_version }}...\
${{ steps.versions.outputs.release_version }}"