Skip to content

custom_event

custom_event #42

Workflow file for this run

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: Access release_tag
uses: actions/github-script@v6
with:
script: |
const releaseTag = context.payload.client_payload?.release_tag;
console.log(`Release Tag: ${releaseTag}`);
- name: Check if issues already exists
id: check-issues
uses: actions/github-script@v6
with:
github-token: ${{ secrets.RELEASE_PAT }}
script: |
(async () => {
const releaseTag = context.payload.client_payload?.release_tag;
if (!releaseTag) {
console.log("No release tag found in client payload.");
core.setOutput('issue_number', '');
return;
}
console.log(`Checking if issue already exists for release tag: ${releaseTag}`);
const { data: issues } = await github.rest.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 ${releaseTag}`);
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: ${releaseTag}`);
core.setOutput('issue_number', '');
}
})();
- name: Create issue
id: create-issue
if: steps.check-issues.outputs.issue_number == ''
uses: actions/github-script@v6
with:
github-token: ${{ secrets.RELEASE_PAT }}
script: |
(async () => {
const releaseTag = context.payload.client_payload?.release_tag;
console.log(`Creating new issue for release tag: ${releaseTag}`);
const { data: issue } = await github.rest.issues.create({
owner: context.repo.owner,
repo: context.repo.repo,
title: `Auto-Update to version ${releaseTag}`,
body: `This is an automated issue created by the auto-update workflow following up a new Release of CLIc.
### Release Information
- **Release Tag:** ${releaseTag}
- **Changelog:** [View Changelog](https://github.com/clEsperanto/CLIc/releases/tag/${releaseTag})
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: Reopen issue
id: reopen-issue
if: steps.check-issues.outputs.issue_number != ''
env:
issue_number: ${{ steps.check-issues.outputs.issue_number }}
uses: actions/github-script@v6
with:
github-token: ${{ secrets.RELEASE_PAT }}
script: |
(async () => {
const issue_number = process.env.issue_number;
const releaseTag = context.payload.client_payload?.release_tag;
console.log(`Adding message to existing issue with number: ${issue_number}`);
const { data: issue } = await github.rest.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.rest.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.rest.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:** ${releaseTag}
- **Changelog:** [View Changelog](https://github.com/clEsperanto/CLIc/releases/tag/${releaseTag})
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
uses: actions/github-script@v6
with:
github-token: ${{ secrets.RELEASE_PAT }}
script: |
const branchName = `auto-update-version-${context.payload.client_payload.release_tag}`;
const { data: branches } = await github.rest.repos.listBranches({
owner: context.repo.owner,
repo: context.repo.repo,
});
const branchExists = branches.some(branch => branch.name === branchName);
if (!branchExists) {
await github.git.createRef({
owner: context.repo.owner,
repo: context.repo.repo,
ref: `refs/heads/${branchName}`,
sha: context.sha,
});
}
- 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"
- name: Check if PR already exists
id: check-pr
uses: actions/github-script@v6
with:
github-token: ${{ secrets.RELEASE_PAT }}
script: |
const releaseTag = context.payload.client_payload.release_tag;
console.log(`Checking if PR already exists for branch: auto-update-version-${releaseTag}`);
const { data: prs } = await github.rest.pulls.list({
owner: context.repo.owner,
repo: context.repo.repo,
state: 'open',
head: `auto-update-version-${releaseTag}`
});
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-${releaseTag}`);
core.setOutput('pr_number', '');
}
- name: Create a pull request
id: create-pr
if: steps.check-pr.outputs.pr_number == ''
uses: actions/github-script@v6
with:
github-token: ${{ secrets.RELEASE_PAT }}
script: |
const releaseTag = context.payload.client_payload.release_tag;
console.log(`Creating new PR for branch: auto-update-version-${releaseTag}`);
const { data: pr } = await github.rest.pulls.create({
owner: context.repo.owner,
repo: context.repo.repo,
title: `Auto-Update to version ${releaseTag}`,
head: `auto-update-version-${releaseTag}`,
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:** ${releaseTag}
**Changelog:** [View Changelog](https://github.com/clEsperanto/CLIc/releases/tag/${releaseTag})
Closes #${{ needs.handle-issue.outputs.issue_number }}`,
labels: ['auto-update']
});
console.log(`Created PR with number: ${pr.number}`);
core.setOutput('pr_number', pr.number);