diff --git a/.github/workflows/semver-branches.yml b/.github/workflows/semver-branches.yml new file mode 100644 index 0000000..08b5e65 --- /dev/null +++ b/.github/workflows/semver-branches.yml @@ -0,0 +1,50 @@ +name: Create SemVer Branches + +on: + release: + types: + - published + +permissions: + contents: write + +jobs: + semver-branches: + name: Create SemVer Branches + runs-on: ubuntu-latest + if: + github.event_name == 'release' && + startsWith(github.event.release.tag_name, 'v') + + steps: + - name: Update semver major & minor branches + uses: actions/github-script@v7 + with: + script: |- + const tagName = context.payload.release.tag_name; + + if (!(new RegExp(/^v\d+[.]\d+[.]\d+$/)).test(tagName)) { + core.setFailed("Tag is not semver"); + return + } + + const [x, y, z] = tagName.slice(1).split("."); + + for (const elm of [`${x}`, `${x}.${y}`]) { + try { + await github.rest.git.createRef({ + owner: context.repo.owner, + repo: context.repo.repo, + ref: `refs/heads/v${elm}`, + sha: context.sha, + }); + } catch (error) { + await github.rest.git.updateRef({ + owner: context.repo.owner, + repo: context.repo.repo, + ref: `heads/v${elm}`, + sha: context.sha, + force: true, + }); + } + }