name: Reusable Release on: workflow_call: inputs: version_suffix: description: "Suffix appended to package.json version" required: false default: "" type: string dist_tag: description: "npm dist-tag to publish under" required: false default: dev type: string permissions: id-token: write contents: write env: NODE_VERSION: 20 jobs: prepare-release: runs-on: ubuntu-latest outputs: version: ${{ steps.versions.outputs.version }} tag: ${{ steps.versions.outputs.tag }} release_name: ${{ steps.versions.outputs.release_name }} steps: - name: Checkout uses: actions/checkout@v4 - name: Setup Node uses: actions/setup-node@v4 with: node-version: ${{ env.NODE_VERSION }} - name: Compute release versions id: versions env: VERSION_SUFFIX: ${{ inputs.version_suffix }} run: | BASE_VERSION=$(node -p "require('./package.json').version") VERSION="${BASE_VERSION}${VERSION_SUFFIX}" TAG="v${VERSION}" echo "version=$VERSION" >> "$GITHUB_OUTPUT" echo "tag=$TAG" >> "$GITHUB_OUTPUT" echo "release_name=$TAG" >> "$GITHUB_OUTPUT" - name: Create GitHub release env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} TAG: ${{ steps.versions.outputs.tag }} run: | if gh release view "$TAG" >/dev/null 2>&1; then echo "Release $TAG already exists" else gh release create "$TAG" --title "$TAG" --generate-notes fi build-and-upload: needs: prepare-release uses: ./.github/workflows/build-and-upload.yml with: version: ${{ needs.prepare-release.outputs.version }} tag: ${{ needs.prepare-release.outputs.tag }} release_name: ${{ needs.prepare-release.outputs.release_name }} secrets: inherit publish-server: needs: - prepare-release - build-and-upload uses: ./.github/workflows/manual-npm-publish.yml with: version: ${{ needs.prepare-release.outputs.version }} dist_tag: ${{ inputs.dist_tag }} secrets: inherit