name: "Auto Release" # Only a single job with this concurrency can run at any given time concurrency: release on: # This runs on a schedule by default: schedule: # https://crontab.guru/#6_17_*_*_2 # Every Tuesday at 5:06pm UTC & 9:06am US West Coast. # GitHub Actions defaults to UTC: - cron: '6 17 * * 2' # There is high load on GitHub Actions at the top of the hour: # # Note: The schedule event can be delayed during periods of high loads of # GitHub Actions workflow runs. High load times include the start of every # hour. To decrease the chance of delay, schedule your workflow to run at a # different time of the hour. # # So we run these at a special time, 9:06. Ask @gerhard about it. # And it also supports manual triggering: # https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#onworkflow_dispatchinputs workflow_dispatch: inputs: release_type: description: 'major|minor|patch|release|prerel' default: 'prerel alpha..' required: true release_version: description: 'Optional release version, e.g. 0.2.0' required: false jobs: bump_version-tag-release: # ⚠️ If this changes, remember to update the running-workflow-name property name: "Bump version, tag & release" runs-on: ubuntu-latest steps: - name: "Check out" uses: actions/checkout@v2 with: fetch-depth: 0 - name: "Ensure that all other checks have succeeded" # https://github.com/lewagon/wait-on-check-action uses: lewagon/wait-on-check-action@v1.0.0 with: ref: ${{ github.ref }} repo-token: ${{ secrets.GITHUB_TOKEN }} wait-interval: 10 # polls the GitHub API every 10 every seconds running-workflow-name: "Bump version, tag & release" allowed-conclusions: success - name: "Create next release tag" env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | if [[ -n "${{ github.event.inputs.release_version }}" ]] then next_release_version="v${{ github.event.inputs.release_version }}" else previous_release_version="$(gh api /repos/:owner/:repo/releases --jq '.[0].tag_name')" echo "PREVIOUS RELEASE VERSION: $previous_release_version" # Rather than installing it on every run, we commit it locally so that we have everything we need locally # wget https://raw.githubusercontent.com/fsaintjacques/semver-tool/3.3.0/src/semver # https://github.com/fsaintjacques/semver-tool next_release_version="v$(./semver bump ${{ github.event.inputs.release_type }} $previous_release_version)" fi echo "NEXT RELEASE VERSION: $next_release_version" gh api -X POST /repos/:owner/:repo/git/refs \ --field ref="refs/tags/$next_release_version" \ --field sha="$GITHUB_SHA" - name: "Fetch new tag" uses: actions/checkout@v2 with: fetch-depth: 0 - name: "Install Go" uses: actions/setup-go@v2 with: go-version: 1.16 - name: "Release" uses: goreleaser/goreleaser-action@v2 with: args: release --rm-dist --debug env: GITHUB_TOKEN: ${{ secrets.DAGGERCI_TOKEN }} AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} AWS_REGION: us-east-1