jdalrymple/sema4

View on GitHub
.github/workflows/pipeline.yml

Summary

Maintainability
Test Coverage
name: Pipeline

on:
  workflow_dispatch:
  push:

jobs:
  install:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - uses: ./.github/actions/setup

  build:
    runs-on: ubuntu-latest
    needs: [install]
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - uses: ./.github/actions/setup
      - name: Build package
        run: yarn build
      - name: Temporarily save build files
        uses: actions/upload-artifact@v3
        with:
          name: build-artifacts
          path: dist
          retention-days: 1

  lint:
    runs-on: ubuntu-latest
    needs: [install]
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - uses: ./.github/actions/setup
      - name: Lint
        run: yarn lint

  format:
    runs-on: ubuntu-latest
    needs: [install]
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - uses: ./.github/actions/setup
      - name: Format
        run: yarn format

  test:
    runs-on: ubuntu-latest
    needs: [install]
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - uses: ./.github/actions/setup
      - name: Run unit tests
        run: yarn test:unit
      - uses: paambaati/codeclimate-action@v5
        env:
          CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}

  release-dry-run:
    runs-on: ubuntu-latest
    if: github.ref != 'refs/heads/main'
    needs: [lint, format, build, test]
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          token: ${{ secrets.GH_TOKEN }}
          fetch-depth: 100
      - name: Fetch Git tags
        shell: bash
        run: git fetch --tags --force
      - uses: ./.github/actions/setup
      - name: Retrieve saved build files
        uses: actions/download-artifact@v3
        with:
          name: build-artifacts
          path: dist
      - name: Dry Run Deployment
        env:
          GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
          NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
          GH_USERNAME: ${{ github.actor }}
        run: |
          npm config set //registry.npmjs.org/:_authToken $NPM_TOKEN
          git config --global user.email "${GH_USERNAME}@users.noreply.github.com"
          git config --global user.name "${GH_USERNAME}"
          yarn release --dry-run

  release:
    runs-on: ubuntu-latest
    if: github.ref == 'refs/heads/main' && !contains(github.event.head_commit.message, 'skip ci')
    needs: [lint, format, build, test]
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          token: ${{ secrets.GH_TOKEN }}
          fetch-depth: 100
      - name: Fetch Git tags
        shell: bash
        run: git fetch --tags --force
      - uses: ./.github/actions/setup
      - name: Retrieve saved build files
        uses: actions/download-artifact@v3
        with:
          name: build-artifacts
          path: dist
      - name: Deploy
        env:
          GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
          NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
          GH_USERNAME: ${{ github.actor }}
        run: |
          npm config set //registry.npmjs.org/:_authToken $NPM_TOKEN
          git config --global user.email "${GH_USERNAME}@users.noreply.github.com"
          git config --global user.name "${GH_USERNAME}"
          yarn release