Create a release #126
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
  | name: Create a release | |
| on: | |
| # Trigger a stable version release via GitHub's UI, with the ability to specify the type of release. | |
| workflow_dispatch: | |
| inputs: | |
| release_type: | |
| description: Release type | |
| required: true | |
| type: choice | |
| default: auto | |
| options: | |
| - auto | |
| - custom | |
| - patch | |
| - minor | |
| - major | |
| custom_version: | |
| description: The custom version to bump to (only for "custom" type) | |
| required: false | |
| type: string | |
| default: "" | |
| concurrency: | |
| group: release | |
| cancel-in-progress: false | |
| jobs: | |
| release_metadata: | |
| name: Prepare release metadata | |
| runs-on: ubuntu-latest | |
| outputs: | |
| version_number: ${{ steps.release_metadata.outputs.version_number }} | |
| tag_name: ${{ steps.release_metadata.outputs.tag_name }} | |
| changelog: ${{ steps.release_metadata.outputs.changelog }} | |
| release_notes: ${{ steps.release_metadata.outputs.release_notes }} | |
| steps: | |
| - uses: apify/workflows/git-cliff-release@main | |
| name: Prepare release metadata | |
| id: release_metadata | |
| with: | |
| release_type: ${{ inputs.release_type }} | |
| custom_version: ${{ inputs.custom_version }} | |
| existing_changelog_path: CHANGELOG.md | |
| update_changelog: | |
| needs: [ release_metadata ] | |
| name: Update changelog | |
| runs-on: ubuntu-latest | |
| outputs: | |
| changelog_commitish: ${{ steps.commit.outputs.commit_long_sha || github.sha }} | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| token: ${{ secrets.APIFY_SERVICE_ACCOUNT_GITHUB_TOKEN }} | |
| - name: Use Node.js 22 | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 22 | |
| - name: Update package version in package.json | |
| run: npm version --no-git-tag-version --allow-same-version ${{ needs.release_metadata.outputs.version_number }} | |
| - name: Update manifest.json version | |
| run: jq '.version = "${{ needs.release_metadata.outputs.version_number }}"' manifest.json > manifest.json.tmp && mv manifest.json.tmp manifest.json | |
| - name: Update CHANGELOG.md | |
| uses: DamianReeves/write-file-action@master | |
| with: | |
| path: CHANGELOG.md | |
| write-mode: overwrite | |
| contents: ${{ needs.release_metadata.outputs.changelog }} | |
| - name: Commit changes | |
| id: commit | |
| uses: EndBug/add-and-commit@v9 | |
| with: | |
| author_name: Apify Release Bot | |
| author_email: [email protected] | |
| message: "chore(release): Update changelog, package.json and manifest.json versions [skip ci]" | |
| create_github_release: | |
| name: Create github release | |
| needs: [release_metadata, update_changelog] | |
| runs-on: ubuntu-latest | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| ref: ${{ needs.update_changelog.outputs.changelog_commitish }} | |
| - name: Verify commit SHA | |
| run: | | |
| CURRENT_SHA=$(git rev-parse HEAD) | |
| EXPECTED_SHA="${{ needs.update_changelog.outputs.changelog_commitish }}" | |
| echo "Expected commit SHA: $EXPECTED_SHA" | |
| echo "Actual checked out SHA: $CURRENT_SHA" | |
| if [ "$EXPECTED_SHA" != "$CURRENT_SHA" ]; then | |
| echo "ERROR: Checked out SHA differs from expected!" | |
| exit 1 | |
| else | |
| echo "✓ Commit SHA matches expected" | |
| fi | |
| - name: Verify manifest.json version | |
| run: | | |
| EXPECTED_VERSION="${{ needs.release_metadata.outputs.version_number }}" | |
| ACTUAL_VERSION=$(jq -r '.version' manifest.json) | |
| echo "Expected version: $EXPECTED_VERSION" | |
| echo "Actual version in manifest.json: $ACTUAL_VERSION" | |
| echo "Current commit SHA: ${{ needs.update_changelog.outputs.changelog_commitish }}" | |
| if [ "$EXPECTED_VERSION" != "$ACTUAL_VERSION" ]; then | |
| echo "ERROR: Version mismatch! Expected $EXPECTED_VERSION but found $ACTUAL_VERSION in manifest.json" | |
| exit 1 | |
| fi | |
| echo "✓ Version check passed: manifest.json has correct version $ACTUAL_VERSION" | |
| - name: Use Node.js 22 | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 22 | |
| cache: 'npm' | |
| cache-dependency-path: 'package-lock.json' | |
| - name: Install dependencies | |
| run: | | |
| echo "access=public" >> .npmrc | |
| echo "//registry.npmjs.org/:_authToken=${NPM_TOKEN}" >> .npmrc | |
| npm ci | |
| - name: Build module | |
| run: npm run build | |
| - name: Prepare MCPB package | |
| run: | | |
| mkdir mcpb | |
| cp -r node_modules mcpb/node_modules | |
| cp -r dist mcpb/dist | |
| cp -r docs mcpb/docs | |
| cp package.json mcpb/package.json | |
| cp manifest.json mcpb/manifest.json | |
| cp docs/apify-logo.png mcpb/icon.png | |
| - name: Create MCPB package | |
| # fix version of anthropic-ai/mcpb to 1.1.1 so that we have a reproducible build | |
| run: npx -y @anthropic-ai/[email protected] pack mcpb/ apify-mcp-server.mcpb | |
| - name: Copy MCPB package | |
| run: cp apify-mcp-server.mcpb actors-mcp-server.mcpb | |
| - name: Create release | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| tag_name: ${{ needs.release_metadata.outputs.tag_name }} | |
| name: ${{ needs.release_metadata.outputs.version_number }} | |
| target_commitish: ${{ needs.update_changelog.outputs.changelog_commitish }} | |
| body: ${{ needs.release_metadata.outputs.release_notes }} | |
| files: | | |
| apify-mcp-server.mcpb | |
| actors-mcp-server.mcpb | |
| publish_to_npm: | |
| name: Publish to NPM | |
| needs: [ release_metadata, update_changelog ] | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| ref: ${{ needs.update_changelog.outputs.changelog_commitish }} | |
| - name: Verify commit SHA | |
| run: | | |
| CURRENT_SHA=$(git rev-parse HEAD) | |
| EXPECTED_SHA="${{ needs.update_changelog.outputs.changelog_commitish }}" | |
| echo "Expected commit SHA: $EXPECTED_SHA" | |
| echo "Actual checked out SHA: $CURRENT_SHA" | |
| if [ "$EXPECTED_SHA" != "$CURRENT_SHA" ]; then | |
| echo "ERROR: Checked out SHA differs from expected!" | |
| exit 1 | |
| else | |
| echo "✓ Commit SHA matches expected" | |
| fi | |
| - name: Verify package.json version | |
| run: | | |
| EXPECTED_VERSION="${{ needs.release_metadata.outputs.version_number }}" | |
| ACTUAL_VERSION=$(jq -r '.version' package.json) | |
| echo "Expected version: $EXPECTED_VERSION" | |
| echo "Actual version in package.json: $ACTUAL_VERSION" | |
| echo "Current commit SHA: ${{ needs.update_changelog.outputs.changelog_commitish }}" | |
| if [ "$EXPECTED_VERSION" != "$ACTUAL_VERSION" ]; then | |
| echo "ERROR: Version mismatch! Expected $EXPECTED_VERSION but found $ACTUAL_VERSION in package.json" | |
| exit 1 | |
| fi | |
| echo "✓ Version check passed: package.json has correct version $ACTUAL_VERSION" | |
| - name: Use Node.js 22 | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 22 | |
| cache: 'npm' | |
| cache-dependency-path: 'package-lock.json' | |
| - name: Install dependencies | |
| run: | | |
| echo "access=public" >> .npmrc | |
| echo "//registry.npmjs.org/:_authToken=${NPM_TOKEN}" >> .npmrc | |
| npm ci | |
| - name: Build module | |
| run: npm run build | |
| - name: Publish to NPM | |
| run: npm publish --tag latest | |
| env: | |
| NODE_AUTH_TOKEN: ${{ secrets.APIFY_SERVICE_ACCOUNT_NPM_TOKEN }} | |
| NPM_TOKEN: ${{ secrets.APIFY_SERVICE_ACCOUNT_NPM_TOKEN }} |