From 8113b710baf97d3f6fc8cb5a3f0ae0faeb285a12 Mon Sep 17 00:00:00 2001 From: Michael Seaton Date: Thu, 14 Mar 2024 23:59:41 -0400 Subject: [PATCH] Add build and publish workflow --- .github/workflows/ci.yml | 128 +++++++++++++++++++++++++++++++++++++++ package.json | 5 +- 2 files changed, 132 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..a21e4ff --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,128 @@ +name: Build and Deploy + +on: + push: + branches: [main] + pull_request: + branches: [main] + release: + types: + - created + +jobs: + build: + runs-on: ubuntu-latest + timeout-minutes: 15 + permissions: + actions: read + + steps: + - uses: actions/checkout@v4 + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: "18" + + - name: Cache dependencies + id: cache + uses: actions/cache@v4 + with: + path: '**/node_modules' + key: ${{ runner.os }}-${{ hashFiles('**/yarn.lock') }} + + - name: Install dependencies + if: steps.cache.outputs.cache-hit != 'true' + run: yarn install --immutable + + - name: Run lint, type checks and tests + run: yarn verify + + - name: Run build + run: yarn turbo run build --color + + - name: Upload build artifacts + uses: actions/upload-artifact@v4 + with: + name: packages + path: | + packages/**/dist + overwrite: true + + pre_release: + runs-on: ubuntu-latest + + needs: build + + if: ${{ github.event_name == 'push' }} + + steps: + - uses: actions/checkout@v4 + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: "18" + registry-url: "https://registry.npmjs.org" + + - name: Cache dependencies + id: cache + uses: actions/cache@v4 + with: + path: '**/node_modules' + key: ${{ runner.os }}-${{ hashFiles('**/yarn.lock') }} + + - name: Install dependencies + if: steps.cache.outputs.cache-hit != 'true' + run: yarn install --immutable + + - name: Version + run: yarn workspaces foreach --worktree --topological --exclude @pih/openmrs-esm-pihemr version "$(node -e "console.log(require('semver').inc(require('./package.json').version, 'patch'))")-pre.${{ github.run_number }}" + + - name: Build + run: yarn turbo run build --color --concurrency=5 + + - run: git config user.email "pihinformatics@gmail.com" && git config user.name "pihinformatics" + - run: git add . && git commit -m "Prerelease version" --no-verify + + - name: Pre-release + run: yarn config set npmAuthToken "${NODE_AUTH_TOKEN}" && yarn run ci:prepublish + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_AUTH_TOKEN }} + + - name: Upload Artifacts + uses: actions/upload-artifact@v4 + with: + name: packages + path: | + packages/**/dist + overwrite: true + + release: + runs-on: ubuntu-latest + + needs: build + + if: ${{ github.event_name == 'release' }} + + steps: + - uses: actions/checkout@v4 + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: "18" + registry-url: "https://registry.npmjs.org" + + - name: Cache dependencies + id: cache + uses: actions/cache@v4 + with: + path: '**/node_modules' + key: ${{ runner.os }}-${{ hashFiles('**/yarn.lock') }} + + - name: Install dependencies + if: steps.cache.outputs.cache-hit != 'true' + run: yarn install --immutable + + - run: yarn turbo run build --color + - run: yarn config set npmAuthToken "${NODE_AUTH_TOKEN}" && yarn run ci:publish + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_AUTH_TOKEN }} diff --git a/package.json b/package.json index ab6b9da..43e3205 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@pih/openmrs-esm-pihemr", - "version": "1.0.0", + "version": "2.1.0", "private": true, "description": "PIH EMR Monorepo for OpenMRS 3.x", "workspaces": [ @@ -8,6 +8,9 @@ ], "scripts": { "start": "openmrs develop", + "ci:publish": "yarn workspaces foreach --all --topological --exclude @pih/openmrs-esm-pihemr npm publish --access public --tag latest", + "ci:prepublish": "yarn workspaces foreach --all --topological --exclude @pih/openmrs-esm-pihemr npm publish --access public --tag next", + "release": "yarn workspaces foreach --all --topological version", "verify": "turbo lint typescript test --color --concurrency=2", "prettier": "prettier --config prettier.config.js --write \"packages/**/*.{ts,tsx,css,scss}\" \"e2e/**/*.ts\" --list-different", "test-e2e": "playwright test",