diff --git a/.github/workflows/gh_release.yml b/.github/workflows/gh_release.yml new file mode 100644 index 0000000..be32524 --- /dev/null +++ b/.github/workflows/gh_release.yml @@ -0,0 +1,80 @@ +# This workflow will load Python, run a script to generate assets, and then +# bundle a github release + +name: Release generator + +on: + pull_request: + types: + - closed + +jobs: + create_release: + if: github.event.pull_request.merged && contains( github.event.pull_request.labels.*.name, 'release') + runs-on: ubuntu-latest + steps: + - name: Manual workaround for Github not having a runtime macro to check for the default branch + id: gatekeeper + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + DEFAULT_BRANCH=$(curl -H "Authorization: token $GITHUB_TOKEN" -s https://api.github.com/repos/$GITHUB_REPOSITORY | jq -rc .default_branch) + unset IS_DEFAULT_BRANCH + if [ "$GITHUB_BASE_REF" == "$DEFAULT_BRANCH" ]; then IS_DEFAULT_BRANCH='true'; fi + echo "::set-output name=IS_DEFAULT_BRANCH::$IS_DEFAULT_BRANCH" + + - uses: actions/checkout@v2 + if: steps.gatekeeper.outputs.IS_DEFAULT_BRANCH + + - uses: actions/setup-python@v2 + if: steps.gatekeeper.outputs.IS_DEFAULT_BRANCH + with: + python-version: 3.8 + + - name: Create tag from title and run asset script + if: steps.gatekeeper.outputs.IS_DEFAULT_BRANCH + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + id: find_tag_and_prepare_assets + run: | + TAG=$(echo ${{ github.event.pull_request.title }} | sed -E "s/^.*Release (.+\..+\..+)$/\1/g") + echo "::set-output name=tag::$TAG" + + SCRIPT=.github/prepare_assets.sh + if [ -f $SCRIPT ]; then + chmod u+x $SCRIPT + $SCRIPT $TAG + fi + + - name: Create Release + if: steps.gatekeeper.outputs.IS_DEFAULT_BRANCH + id: create_release + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ steps.find_tag_and_prepare_assets.outputs.tag }} + release_name: ${{ github.event.pull_request.title }} + body: ${{ github.event.pull_request.body }} + draft: false + prerelease: false + + - name: Add latest-release tag + if: steps.gatekeeper.outputs.IS_DEFAULT_BRANCH + run: | + git tag -f latest-release + git push -f --tags + + - name: Upload Assets + if: steps.gatekeeper.outputs.IS_DEFAULT_BRANCH + run: | + upload_url=${{ steps.create_release.outputs.upload_url }} + if [ -f .github/release_assets.txt ]; then + while IFS="" read -r FILE || [ -n "$FILE" ] + do + curl -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ + -H "Content-Type: $(file -b --mime-type $FILE)" \ + --data-binary "@$FILE" \ + "${upload_url%\{*}?name=$(basename $FILE)" + done < .github/release_assets.txt + fi