feat(release): β¨ π setup CI for releasing npm packages #6
This file contains 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: push | |
on: | |
push: | |
branches: | |
- main | |
pull_request: | |
branches: | |
- main | |
jobs: | |
build: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
with: | |
ref: ${{ github.ref_name }} | |
- name: Set Node.js 20.x | |
uses: actions/setup-node@v3 | |
with: | |
node-version: 20.x | |
- name: Install Dependencies | |
run: yarn install --frozen-lockfile | |
- name: Build | |
run: yarn build | |
- name: Upload build artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: build | |
path: ./dist | |
test: | |
runs-on: ubuntu-latest | |
permissions: | |
checks: write | |
pull-requests: write | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
with: | |
ref: ${{ github.ref_name }} | |
- name: Set Node.js 20.x | |
uses: actions/setup-node@v3 | |
with: | |
node-version: 20.x | |
- name: Install Dependencies | |
run: yarn install --frozen-lockfile | |
- name: Test | |
run: yarn test | |
- name: Test Report | |
uses: EnricoMi/publish-unit-test-result-action@v2 | |
with: | |
files: test-report.xml | |
if: always() | |
pr-prerelease: | |
if: github.event_name == 'pull_request' && github.event.action != 'closed' | |
runs-on: ubuntu-latest | |
needs: | |
- build | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
with: | |
ref: ${{ github.ref_name }} | |
- name: Set Node.js 20.x | |
uses: actions/setup-node@v3 | |
with: | |
node-version: 20.x | |
- name: Download build artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
name: build | |
path: ./dist | |
- name: Extract branch name | |
shell: bash | |
run: echo "branch=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}" >> $GITHUB_OUTPUT | |
id: extract_branch | |
- name: Configure Git | |
uses: fregante/setup-git-user@v1 | |
- name: Version the package | |
run: npm version --no-commit-hooks --no-git-tag-version prerelease --preid $(echo "${{ steps.extract_branch.outputs.branch }}" | tr -cs 'a-zA-Z0-9-' '-' | sed 's/-$//') | |
- name: Commit and push changes | |
run: | | |
git commit -am "chore(version): π¦ bump version for prerelease" | |
git push | |
- name: Publish to GitHub Package Registry | |
run: | | |
echo "//npm.pkg.github.com/:_authToken=${{secrets.GITHUB_TOKEN}}" > ~/.npmrc | |
npm publish --registry https://npm.pkg.github.com/ | |
# - name: Publish to npm | |
# run: npm publish | |
# env: | |
# NODE_AUTH_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN }} | |
patch-release: | |
if: github.ref == 'refs/heads/main' && github.event_name == 'workflow_dispatch' | |
runs-on: ubuntu-latest | |
needs: | |
- build | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
with: | |
ref: ${{ github.ref_name }} | |
- name: Set Node.js 20.x | |
uses: actions/setup-node@v3 | |
with: | |
node-version: 20.x | |
- name: Download build artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
name: build | |
path: ./dist | |
- name: Version the package (Patch) | |
run: npm version --no-commit-hooks --no-git-tag-version patch | |
- name: Configure Git | |
uses: fregante/setup-git-user@v1 | |
- name: Commit and push changes | |
run: | | |
git commit -am "chore(version): π¦ bump version for patch release" | |
git push | |
- name: Publish to GitHub Package Registry | |
run: | | |
echo "//npm.pkg.github.com/:_authToken=${{secrets.GITHUB_TOKEN}}" > ~/.npmrc | |
npm publish --registry https://npm.pkg.github.com/ | |
- name: Publish to npm | |
run: npm publish | |
env: | |
NODE_AUTH_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN }} | |
minor-release: | |
if: github.ref == 'refs/heads/main' && github.event_name == 'workflow_dispatch' | |
runs-on: ubuntu-latest | |
needs: | |
- build | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
with: | |
ref: ${{ github.ref_name }} | |
- name: Set Node.js 20.x | |
uses: actions/setup-node@v3 | |
with: | |
node-version: 20.x | |
- name: Download build artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
name: build | |
path: ./dist | |
- name: Configure Git | |
uses: fregante/setup-git-user@v1 | |
- name: Version the package (Minor) | |
run: npm version --no-commit-hooks --no-git-tag-version minor | |
- name: Commit and push changes | |
run: | | |
git commit -am "chore(version): π¦ bump version for minor release" | |
git push | |
- name: Publish to GitHub Package Registry | |
run: | | |
echo "//npm.pkg.github.com/:_authToken=${{secrets.GITHUB_TOKEN}}" > ~/.npmrc | |
npm publish --registry https://npm.pkg.github.com/ | |
- name: Publish to npm | |
run: npm publish | |
env: | |
NODE_AUTH_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN }} | |
major-release: | |
if: github.ref == 'refs/heads/main' && github.event_name == 'workflow_dispatch' | |
runs-on: ubuntu-latest | |
needs: | |
- build | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
with: | |
ref: ${{ github.ref_name }} | |
- name: Set Node.js 20.x | |
uses: actions/setup-node@v3 | |
with: | |
node-version: 20.x | |
- name: Download build artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
name: build | |
path: ./dist | |
- name: Configure Git | |
uses: fregante/setup-git-user@v1 | |
- name: Version the package (Major) | |
run: npm version --no-commit-hooks --no-git-tag-version major | |
- name: Commit and push changes | |
run: | | |
git commit -am "chore(version): π¦ bump version for major release" | |
git push | |
- name: Publish to GitHub Package Registry | |
run: | | |
echo "//npm.pkg.github.com/:_authToken=${{secrets.GITHUB_TOKEN}}" > ~/.npmrc | |
npm publish --registry https://npm.pkg.github.com/ | |
- name: Publish to npm | |
run: npm publish | |
env: | |
NODE_AUTH_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN }} |