custom_event #26
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: Auto Update | |
on: | |
repository_dispatch: | |
types: [custom_event] | |
jobs: | |
handle-issue: | |
runs-on: ubuntu-latest | |
outputs: | |
issue_number: ${{ steps.check-issues.outputs.issue_number }} | |
steps: | |
- name: Get release tag | |
run: | | |
echo "Received release tag: ${{ github.event.client_payload.release_tag }} from CLIc" | |
- name: Check if issues already exists | |
id: check-issues | |
uses: actions/github-script@v3 | |
with: | |
github-token: ${{ secrets.RELEASE_PAT }} | |
script: | | |
console.log("Checking if issue already exists for release tag: " + context.payload.client_payload.release_tag); | |
const { data: issues } = await github.issues.listForRepo({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
labels: 'auto-update', | |
state: 'all' | |
}); | |
const issue = issues.find(issue => issue.title === `Auto-Update to version ${context.payload.client_payload.release_tag}`); | |
if (issue) { | |
console.log("Issue already exists with number: " + issue.number); | |
core.setOutput('issue_number', issue.number); | |
} else { | |
console.log("No existing issue found for release tag: " + context.payload.client_payload.release_tag); | |
core.setOutput('issue_number', ''); | |
} | |
- name: Create issue | |
id: create-issue | |
if: steps.check-issues.outputs.issue_number == '' | |
uses: actions/github-script@v3 | |
with: | |
github-token: ${{ secrets.RELEASE_PAT }} | |
script: | | |
console.log("Creating new issue for release tag: " + context.payload.client_payload.release_tag); | |
const { data: issue } = await github.issues.create({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
title: `Auto-Update to version ${context.payload.client_payload.release_tag}`, | |
body: `This is an automated issue created by the auto-update workflow following up a new Release of CLIc. | |
### Release Information | |
- **Release Tag:** ${context.payload.client_payload.release_tag} | |
- **Changelog:** [View Changelog](https://github.com/clEsperanto/CLIc/releases/tag/${context.payload.client_payload.release_tag}) | |
Please review the changes and update the dependencies accordingly.`, | |
labels: ['auto-update'] | |
}); | |
console.log("Created issue with number: " + issue.number); | |
core.setOutput('issue_number', issue.number); | |
- name: Add message | |
id: add-message | |
if: steps.check-issues.outputs.issue_number != '' | |
uses: actions/github-script@v3 | |
with: | |
github-token: ${{ secrets.RELEASE_PAT }} | |
script: | | |
const issue_number = ${{ steps.check-issues.outputs.issue_number }}; | |
console.log("Adding message to existing issue with number: " + issue_number); | |
const { data: issue } = await github.issues.get({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
issue_number: issue_number | |
}); | |
if (issue.state === 'closed') { | |
console.log("Reopening closed issue with number: " + issue_number); | |
await github.issues.update({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
issue_number: issue_number, | |
state: 'open' | |
}); | |
console.log("Adding comment to reopened issue with number: " + issue_number); | |
await github.issues.createComment({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
issue_number: issue_number, | |
body: `This is an automated issue created by the auto-update workflow following up a new Release of CLIc. | |
### Release Information | |
- **Release Tag:** ${context.payload.client_payload.release_tag} | |
- **Changelog:** [View Changelog](https://github.com/clEsperanto/CLIc/releases/tag/${context.payload.client_payload.release_tag}) | |
Please review the changes and update the dependencies accordingly.` | |
}); | |
} | |
core.setOutput('issue_number', issue_number); | |
update-code: | |
needs: handle-issue | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v2 | |
- name: Configure git | |
run: | | |
echo "Configuring git user" | |
git config --global user.name "github-actions[bot]" | |
git config --global user.email "github-actions[bot]@users.noreply.github.com" | |
- name: Check if branch exists or create a new one | |
run: | | |
echo "Fetching all branches" | |
git fetch --all | |
BRANCH_NAME="auto-update-version-${{ github.event.client_payload.release_tag }}" | |
if git show-ref --verify --quiet refs/heads/$BRANCH_NAME; then | |
echo "Branch $BRANCH_NAME already exists" | |
git checkout $BRANCH_NAME | |
else | |
echo "Creating new branch $BRANCH_NAME" | |
git checkout -b $BRANCH_NAME | |
fi | |
- name: Get GenCLE and update code | |
id: update-code | |
env: | |
GH_TOKEN: ${{ secrets.RELEASE_PAT }} | |
run: | | |
echo "Cloning GenCLE repository" | |
git clone https://[email protected]/clEsperanto/gencle.git gencle | |
echo "Running update script" | |
python ./gencle/pyclesperanto_auto_update.py ${{ github.workspace }} ${{ github.event.client_payload.release_tag }} | |
echo "Cleaning up GenCLE repository" | |
rm -rf gencle | |
- name: Commit and push changes if any | |
id: commit-push | |
run: | | |
echo "Checking for changes to commit" | |
if ! git diff-index --quiet HEAD; then | |
echo "Changes detected, committing and pushing" | |
git add . | |
git commit -m "Update tiers to ${{ github.event.client_payload.release_tag }}" | |
git push origin auto-update-version-${{ github.event.client_payload.release_tag }} | |
else | |
echo "No changes detected, skipping commit" | |
fi | |
- name: Check if PR already exists | |
id: check-pr | |
uses: actions/github-script@v3 | |
with: | |
github-token: ${{ secrets.RELEASE_PAT }} | |
script: | | |
console.log("Checking if PR already exists for branch: auto-update-version-" + context.payload.client_payload.release_tag); | |
const { data: prs } = await github.pulls.list({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
state: 'open', | |
head: `auto-update-version-${context.payload.client_payload.release_tag}` | |
}); | |
if (prs.length > 0) { | |
console.log("PR already exists with number: " + prs[0].number); | |
core.setOutput('pr_number', prs[0].number); | |
} else { | |
console.log("No existing PR found for branch: auto-update-version-" + context.payload.client_payload.release_tag); | |
core.setOutput('pr_number', ''); | |
} | |
- name: Create a pull request | |
id: create-pr | |
if: steps.check-pr.outputs.pr_number == '' | |
uses: actions/github-script@v3 | |
with: | |
github-token: ${{ secrets.RELEASE_PAT }} | |
script: | | |
console.log("Creating new PR for branch: auto-update-version-" + context.payload.client_payload.release_tag); | |
const { data: pr } = await github.pulls.create({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
title: `Auto-Update to version ${context.payload.client_payload.release_tag}`, | |
head: `auto-update-version-${context.payload.client_payload.release_tag}`, | |
base: 'main', | |
body: `### Automated Dependency Update | |
This is an automated pull request created by the auto-update workflow following up a new Release of CLIc. | |
**Release Tag:** ${context.payload.client_payload.release_tag} | |
**Changelog:** [View Changelog](https://github.com/clEsperanto/CLIc/releases/tag/${context.payload.client_payload.release_tag}) | |
Closes #${{ needs.handle-issue.outputs.issue_number }}`, | |
labels: ['auto-update'] | |
}); | |
console.log("Created PR with number: " + pr.number); | |
core.setOutput('pr_number', pr.number); |