Prepare for release #3
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Release | |
##### | |
# Your changelog must be called CHANGELOG (no ext) and use the expected format (Package_Name tag_number (date) \n ------- \n changes...) | |
# Any text between the previous and new version in the changelog will be used as the text for the release, so use markdown syntax as needed | |
# The package_name variable must match what is in your CHANGELOG and will be used as part of the release name | |
# This workflow maybe supports pre-release versions (with rc in the version) - but no promises. | |
##### | |
on: | |
push: | |
branches: | |
- main | |
env: | |
package_name: snowplow-unified | |
jobs: | |
version_check: | |
runs-on: ubuntu-latest | |
outputs: | |
v_package: ${{ steps.version.outputs.dbt_package_version}} | |
v_old: ${{ steps.previoustag.outputs.tag}} | |
new_version: ${{ steps.new_version_flag.outputs.new_version}} | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 # needed to get tags | |
- name: 'Get Previous tag' | |
id: previoustag | |
uses: "WyriHaximus/github-action-get-previous-tag@v1" | |
with: | |
fallback: 0.0.1 # Optional fallback tag to use when no tag can be found | |
- name: Get tag and package versions | |
id: version | |
# Grab the version number of from the project.yml file as the pushed version of the package, set to variable dbt_package_version | |
run: | | |
echo "dbt_package_version=$(grep -oP "(?<=version: ')(.*)(?=')" dbt_project.yml)" >> $GITHUB_OUTPUT | |
echo "Project YAML version: $(grep -oP "(?<=version: ')(.*)(?=')" dbt_project.yml)" | |
- name: Echo if version already match | |
if: ${{ steps.previoustag.outputs.tag == steps.version.outputs.dbt_package_version }} | |
run: | | |
echo "Tag version (${{ steps.previoustag.outputs.tag }}) is the same as the version in project (${{ steps.version.outputs.dbt_package_version }}), no need to release." | |
- name: Ensure future steps continue if version doesn't match | |
id: new_version_flag | |
if: ${{ steps.previoustag.outputs.tag != steps.version.outputs.dbt_package_version }} | |
# Set a flag to check if we need to run the future steps, if this is not set they won't run. | |
run: | | |
echo "Tag version (${{ steps.previoustag.outputs.tag }}) is different from the version in project (${{ steps.version.outputs.dbt_package_version }}), will release." | |
echo "new_version=yes" >> $GITHUB_OUTPUT | |
tagging: | |
if: ${{ needs.version_check.outputs.new_version == 'yes' }} | |
needs: ['version_check'] | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
- name: Setup git | |
uses: oleksiyrudenko/[email protected] | |
with: | |
token: '${{ secrets.GITHUB_TOKEN }}' | |
name: github-actions[bot] | |
email: 41898282+github-actions[bot]@users.noreply.github.com | |
- name: Generate Release Information | |
id: tag_version | |
uses: mathieudutour/[email protected] | |
# Use this to avoid overwriting existing tags | |
with: | |
dry_run: true | |
github_token: ${{ secrets.GITHUB_TOKEN }} | |
tag_prefix: '' | |
default_bump: false | |
custom_tag: ${{ needs.version_check.outputs.v_package }} | |
- name: Tag release | |
run: | | |
git tag ${{ steps.tag_version.outputs.new_tag }} | |
git push --tags | |
release: | |
if: ${{ needs.version_check.outputs.new_version == 'yes' }} | |
needs: ["version_check", "tagging"] | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
- name: Prep release body | |
id: release_prep | |
# Grep the CHANGELOG to get the text between the new version line and the previous version line (tail to cut off the ----- line, can't have variable length lookbacks in regex) | |
# Due to multiline output, need to use this EOF approach https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings | |
run: | | |
echo 'release_body<<EOF' >> $GITHUB_OUTPUT | |
echo "$(grep -Pzo "(?<=${{env.package_name}} ${{ needs.version_check.outputs.v_package }} \(\d{4}-\d{2}-\d{2}\)\n)-*\n(?s)(.*)(?=${{env.package_name}} ${{ needs.version_check.outputs.v_old }} \(\d{4}-\d{2}-\d{2}\))" CHANGELOG | tail -n +2)" >> $GITHUB_OUTPUT | |
echo 'EOF' >> $GITHUB_OUTPUT | |
- name: Release | |
uses: ncipollo/release-action@v1 | |
with: | |
tag: ${{ needs.version_check.outputs.v_package }} | |
name: ${{env.package_name}} v${{ needs.version_check.outputs.v_package }} | |
draft: false | |
body: ${{ steps.release_prep.outputs.release_body }} | |
prerelease: ${{ contains(needs.version_check.outputs.v_package, 'rc') }} | |
token: ${{ secrets.GITHUB_TOKEN }} |