name: Bump Version run-name: ${{ gitea.actor }} runs patch update on: workflow_call: inputs: node_version: description: Node.js version to use type: string default: "24" secrets: GITEA_TOKEN: description: Token for checkout/push (optional) required: false jobs: bump-version: runs-on: ubuntu-latest outputs: tag: ${{ steps.bump.outputs.tag }} steps: - name: Checkout uses: actions/checkout@v3 with: fetch-depth: 0 fetch-tags: true token: ${{ secrets.GITEA_TOKEN }} - name: Setup Git run: | git config user.name "CI Bot" git config user.email "ci@git.uesome.de" - name: Setup Node uses: actions/setup-node@v3 with: node-version: ${{ inputs.node_version }} - name: Bump patch version and tag id: bump run: | REF="${GITHUB_REF:-${GITEA_REF}}" BRANCH="${REF#refs/heads/}" git fetch origin "${BRANCH}" --tags git checkout "${BRANCH}" git pull --ff-only origin "${BRANCH}" BRANCH_SAFE="$(echo "${BRANCH}" | tr '/[:space:].' '-' | tr -cd '[:alnum:]_-')" BRANCH_SAFE="$(echo "${BRANCH_SAFE}" | sed 's/^-*//;s/-*$//')" BRANCH_SAFE="${BRANCH_SAFE:-unknown}" case "${BRANCH}" in main) COMMIT_MSG="$(git log -1 --pretty=%B)" TARGET_VERSION="" if [[ "${COMMIT_MSG}" =~ release/([0-9]+)\.([0-9]+) ]]; then TARGET_VERSION="${BASH_REMATCH[1]}.${BASH_REMATCH[2]}.0" elif [[ "${COMMIT_MSG}" =~ hotfix/([0-9]+\.[0-9]+\.[0-9]+) ]]; then TARGET_VERSION="${BASH_REMATCH[1]}" fi if [[ -n "${TARGET_VERSION}" ]]; then npm version "${TARGET_VERSION}" --no-git-tag-version --allow-same-version BUMP_CMD="npm version patch --no-git-tag-version" else npm version patch --no-git-tag-version BUMP_CMD="npm version patch --no-git-tag-version" fi ;; develop) npm version prerelease --preid=dev --no-git-tag-version BUMP_CMD="npm version prerelease --preid=dev --no-git-tag-version" ;; release*) npm version prerelease --preid=rc-${BRANCH_SAFE} --no-git-tag-version BUMP_CMD="npm version prerelease --preid=rc-${BRANCH_SAFE} --no-git-tag-version" ;; *) npm version prerelease --preid=nightly-${BRANCH_SAFE} --no-git-tag-version BUMP_CMD="npm version prerelease --preid=nightly-${BRANCH_SAFE} --no-git-tag-version" ;; esac VERSION="$(node -p "require('./package.json').version")" while git rev-parse -q --verify "refs/tags/v${VERSION}" >/dev/null; do echo "Tag v${VERSION} already exists; trying next version." ${BUMP_CMD} VERSION="$(node -p "require('./package.json').version")" done if git diff --quiet; then echo "No version file changes; tagging current commit." else git add package.json package-lock.json 2>/dev/null || true git commit -m "update version: v${VERSION}" fi TAG="v${VERSION}" git tag "${TAG}" git push origin HEAD git push origin "${TAG}" echo "tag=${TAG}" >> "${GITHUB_OUTPUT}"