Skip to content

Check for upstream releases #173

Check for upstream releases

Check for upstream releases #173

---
name: Check for upstream releases
on:
schedule:
- cron: 0 0 * * *
workflow_dispatch: {}
permissions:
contents: read
jobs:
check-upstream:
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v4
with:
token: ${{ secrets.CUSTOM_GITHUB_TOKEN }}
- run: npm install compare-versions@6
- uses: actions/github-script@v7
with:
script: |
const { compare, compareVersions } = require(`compare-versions`);
const upstreamTags = (
await github.rest.repos.listReleases({
owner: `protocolbuffers`,
repo: `protobuf`,
per_page: 100,
})
).data
.filter((release) => !release.draft && !release.prerelease)
.map((release) => release.tag_name)
.filter((tag) => compare(tag, `v22.0`, `>=`));
const originTags = new Set(
(
await github.rest.repos.listTags({
owner: context.payload.repository.owner.login,
repo: context.payload.repository.name,
per_page: 100,
})
).data.map((tag) => tag.name)
);
const tagsToCreate = upstreamTags
.filter((tag) => !originTags.has(tag))
.sort(compareVersions);
if (!tagsToCreate.length) {
return;
}
for (const tag of tagsToCreate) {
await exec.exec(`git`, [`tag`, tag]);
await exec.exec(`git`, [`push`, `--tags`]);
await new Promise((resolve) => setTimeout(resolve, 30 * 1000));
}