Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Automatic release part 2 #116

Merged
merged 9 commits into from
Nov 28, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
111 changes: 111 additions & 0 deletions .github/workflows/release-post-merge.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
name: Post-Merge Release Actions

on:
workflow_call:
inputs:
base_branch:
type: string
description: "The base branch to check for merged PRs"
required: false
default: "main"
develop_branch:
type: string
description: "The branch to merge into"
required: false
default: "develop"
pr_title:
type: string
description: "The title of the merged pull request"
required: true
pr_number:
type: string
description: "The number of the merged pull request"
required: true
repository_owner:
type: string
description: "The owner of the repository"
required: true
repository_name:
type: string
description: "The name of the repository"
required: true


permissions:
contents: write
pull-requests: write

env:
GITHUB_USER: "datavisyn-bot"
GITHUB_TOKEN: ${{ secrets.DATAVISYN_BOT_REPO_TOKEN }}

jobs:
post_release:
runs-on: ubuntu-22.04
steps:
- name: Checkout Repository
uses: actions/checkout@v4
with:
token: ${{ secrets.CHECKOUT_TOKEN || github.event.repository.private == true && secrets.DATAVISYN_BOT_REPO_TOKEN || github.token }}
fetch-depth: 0

- name: Create and Push Tag
run: |
TAG_NAME="v$(echo "${{ inputs.pr_title }}" | awk '{print $2}')"
git tag "$TAG_NAME"
git push origin "$TAG_NAME"

- name: Get PR body from release PR for release notes
id: get-pr-body
run: |
echo "Fetching PR body for release notes..."
PR_RESPONSE=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
-H "Accept: application/vnd.github.v3+json" \
https://api.github.com/repos/${{ inputs.repository_owner }}/${{ inputs.repository_name }}/pulls/${{ inputs.pr_number }})

PR_BODY=$(echo "$PR_RESPONSE" | jq -r '.body')
echo "$PR_BODY" > pr_release_notes.txt

- name: Create GitHub Release
run: |
TAG_NAME="v$(echo "${{ inputs.pr_title }}" | awk '{print $2}')"
RELEASE_NOTES=$(cat pr_release_notes.txt)

RESPONSE=$(curl -s -o response.json -w "%{http_code}" -X POST \
-H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
-H "Accept: application/vnd.github.v3+json" \
https://api.github.com/repos/${{ inputs.repository_owner }}/${{ inputs.repository_name }}/releases \
-d "$(jq -n \
--arg tag_name "$TAG_NAME" \
--arg target_commitish "${{ inputs.base_branch }}" \
--arg name "$TAG_NAME" \
--arg body "$RELEASE_NOTES" \
'{tag_name: $tag_name, target_commitish: $target_commitish, name: $name, body: $body, draft: false, prerelease: false}')")

if [ "$RESPONSE" -ne 201 ]; then
echo "Failed to create GitHub release. Status code: $RESPONSE"
echo "Response body:"
cat response.json
exit 1
else
echo "GitHub release '$TAG_NAME' created successfully."
fi

- name: Merge Main into Develop
run: |
git config user.name "$GITHUB_ACTOR"
git config user.email "<>"
git checkout ${{ inputs.develop_branch }}
git fetch origin ${{ inputs.base_branch }}
git merge origin/${{ inputs.base_branch }}
git push origin ${{ inputs.develop_branch }}

- name: Update Package Version for Next Development Cycle
run: |
CURRENT_VERSION=$(jq -r '.version' package.json)
NEW_VERSION=$(echo "$CURRENT_VERSION" | awk -F. -v OFS=. '{$NF += 1 ; print $0"-SNAPSHOT"}')
jq --arg new_version "$NEW_VERSION" '.version = $new_version' package.json > tmp.json && mv tmp.json package.json

git add package.json
git commit -m "chore: prepare next dev release"
git push origin ${{ inputs.develop_branch }}