name: Automated Release on: schedule: # Runs at 2:00 AM UTC on the first Saturday of every month - cron: '0 2 1-7 * 6' workflow_dispatch: # Allow manual triggering of the workflow jobs: check-and-release: runs-on: ubuntu-latest steps: - name: Checkout Code uses: actions/checkout@v3 with: fetch-depth: 0 - name: Get Latest Tag run: | latest_tag=$(git describe --tags $(git rev-list --tags --max-count=1) || echo "v0.0.0") echo "Latest tag: $latest_tag" echo "latest_tag=$latest_tag" >> $GITHUB_ENV - name: Check for changes since last release run: | if [ -z "$(git diff --name-only ${{ env.latest_tag }})" ]; then echo "No changes detected since last release" exit 1 fi - name: Check for Blocking Issues/PRs id: check_blocks run: | gh auth setup-git gh auth status echo "Checking for blocking issues and PRs..." # Check for blocking issues blocking_issues=$(gh issue list -l blocks-release --json number,title --jq '.[] | "- \(.title) (#\(.number))"') # Check for blocking PRs blocking_prs=$(gh pr list -l blocks-release --json number,title --jq '.[] | "- \(.title) (#\(.number)) (PR)"') # Combine the results blocking_items="$blocking_issues"$'\n'"$blocking_prs" # Remove empty lines blocking_items=$(echo "$blocking_items" | grep . || true) if [ -n "$blocking_items" ]; then echo "Blocking issues/PRs detected:" echo "$blocking_items" exit 1 fi env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Calculate next version run: | echo "Latest tag: ${{ env.latest_tag }}" IFS='.' read -r major minor patch <<< "${{ env.latest_tag }}" new_minor=$((minor + 1)) new_tag="$major.$new_minor.0" echo "New tag: $new_tag" echo "new_tag=$new_tag" >> $GITHUB_ENV # This will trigger a deploy via .github/workflows/cd.yml - name: Push New Tag run: | git config user.name "github-actions[bot]" git config user.email "github-actions[bot]@users.noreply.github.com" git tag ${{ env.new_tag }} git push origin ${{ env.new_tag }} env: GITHUB_TOKEN: ${{ secrets.GITHUB_API_TOKEN }}