Merge pull request #14639 from rtibblesbot/issue-14635-1592a2 #39
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: Publish packages to npm | |
| on: | |
| push: | |
| branches: | |
| - develop | |
| paths: | |
| - 'packages/browserslist-config-kolibri/package.json' | |
| - 'packages/eslint-plugin-kolibri/package.json' | |
| - 'packages/kolibri/package.json' | |
| - 'packages/kolibri-app/package.json' | |
| - 'packages/kolibri-build/package.json' | |
| - 'packages/kolibri-format/package.json' | |
| - 'packages/kolibri-glob/package.json' | |
| - 'packages/kolibri-i18n/package.json' | |
| - 'packages/kolibri-jest-config/package.json' | |
| - 'packages/kolibri-logging/package.json' | |
| - 'packages/kolibri-module/package.json' | |
| - 'packages/kolibri-plugin-data/package.json' | |
| - 'packages/kolibri-viewer/package.json' | |
| workflow_dispatch: | |
| inputs: | |
| npm_package: | |
| description: 'Package to publish (or "all" to auto-detect)' | |
| required: true | |
| type: choice | |
| default: 'all' | |
| options: | |
| - 'all' | |
| - 'browserslist-config-kolibri' | |
| - 'eslint-plugin-kolibri' | |
| - 'kolibri' | |
| - 'kolibri-app' | |
| - 'kolibri-build' | |
| - 'kolibri-format' | |
| - 'kolibri-glob' | |
| - 'kolibri-i18n' | |
| - 'kolibri-jest-config' | |
| - 'kolibri-logging' | |
| - 'kolibri-module' | |
| - 'kolibri-plugin-data' | |
| - 'kolibri-viewer' | |
| jobs: | |
| publish: | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read # Required for npm provenance attestation | |
| id-token: write # Required for npm OIDC trusted publishing | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: actions/setup-node@v6 | |
| with: | |
| node-version: '24' | |
| registry-url: 'https://registry.npmjs.org' | |
| - name: Install pnpm | |
| uses: pnpm/action-setup@v5 | |
| - name: Link workspace packages | |
| run: pnpm install --ignore-scripts --no-optional | |
| - name: Publish to npm | |
| id: publish | |
| run: | | |
| if [ "${{ github.event_name }}" = "workflow_dispatch" ] && [ "${{ github.event.inputs.npm_package }}" != "all" ]; then | |
| ./scripts/npm_publish.sh "${{ github.event.inputs.npm_package }}" | |
| else | |
| ./scripts/npm_publish.sh | |
| fi | |
| if [ -f publish_summary.md ]; then | |
| cat publish_summary.md >> "$GITHUB_STEP_SUMMARY" | |
| echo "published=true" >> "$GITHUB_OUTPUT" | |
| else | |
| echo "No packages needed publishing — all versions match npm." >> "$GITHUB_STEP_SUMMARY" | |
| fi | |
| - name: Build Slack message | |
| if: steps.publish.outputs.published == 'true' | |
| id: slack_message | |
| run: | | |
| run_url="${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" | |
| { | |
| echo "text<<SLACKEOF" | |
| echo ":package: *npm packages published* (<${run_url}|workflow run>)" | |
| sed -n 's#^| *\[\([^]]*\)\](\([^)]*\)) *| *\([^ |]*\) *|$#• <\2|\1> v\3#p' publish_summary.md | |
| echo "SLACKEOF" | |
| } >> "$GITHUB_OUTPUT" | |
| - name: Notify Slack | |
| if: steps.publish.outputs.published == 'true' | |
| uses: slackapi/slack-github-action@v3 | |
| with: | |
| webhook: ${{ secrets.SLACK_NPM_PACKAGES_WEBHOOK }} | |
| webhook-type: incoming-webhook | |
| payload: | | |
| { | |
| "text": ${{ toJSON(steps.slack_message.outputs.text) }} | |
| } |