Skip to content

Commit

Permalink
refactor: only run client tests on it's own
Browse files Browse the repository at this point in the history
  • Loading branch information
naftis committed Jun 18, 2024
1 parent e0066cd commit c09a8c1
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 52 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,58 +7,42 @@
#
# Copyright (C) The OpenCRVS Authors located at https://github.com/opencrvs/opencrvs-core/blob/master/AUTHORS.

name: Lint, run client and login tests and security scans
name: Lint, run client tests and security scans

on: [pull_request]

jobs:
setup:
runs-on: ubuntu-22.04
outputs:
matrix: ${{ steps.set-matrix.outputs.matrix }}

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Get list of packages
id: set-matrix
run: |
PACKAGES='["packages/client", "packages/login"]'
echo "Found packages: $PACKAGES"
echo "matrix=${PACKAGES}" >> $GITHUB_OUTPUT
test:
needs: setup
build:
runs-on: ubuntu-22.04
strategy:
fail-fast: false
matrix:
package: ${{fromJson(needs.setup.outputs.matrix)}}
shard: [1/4, 2/4, 3/4, 4/4]

needs: setup
steps:
- name: Checking out git repo
- name: Checkout code
uses: actions/checkout@v4

- name: Check package.json and scripts
id: check-scripts
run: |
if [ ! -f "${{ matrix.package }}/package.json" ]; then
echo "No package.json found for ${{ matrix.package }}. Stopping pipeline."
if [ ! -f "packages/client/package.json" ]; then
echo "No package.json found for packages/client. Stopping pipeline."
echo "skip=true" >> $GITHUB_OUTPUT
else
echo "skip=false" >> $GITHUB_OUTPUT
if ! grep -q "\"test\":" "${{ matrix.package }}/package.json"; then
echo "Test not found in ${{ matrix.package }}"
if ! grep -q "\"test\":" "packages/client/package.json"; then
echo "Test not found in packages/client"
echo "skip-test=true" >> $GITHUB_OUTPUT
else
echo "skip=false" >> $GITHUB_OUTPUT
fi
if ! grep -q "\"lint\":" "${{ matrix.package }}/package.json"; then
echo "Lint scripts not found in ${{ matrix.package }}. Stopping pipeline."
if ! grep -q "\"lint\":" "packages/client/package.json"; then
echo "Lint scripts not found in packages/client. Stopping pipeline."
echo "skip-lint=true" >> $GITHUB_OUTPUT
else
echo "skip-lint=false" >> $GITHUB_OUTPUT
Expand All @@ -71,39 +55,22 @@ jobs:
with:
node-version-file: .nvmrc

- name: Remove other package directories
- name: Cache node modules
if: steps.check-scripts.outputs.skip != 'true'
run: |
for dir in packages/*; do
if [ "$dir" != "${{ matrix.package }}" ] && [ "$dir" != "packages/commons" ] && [ "$dir" != "packages/components" ]; then
if [ "${{ matrix.package }}" == "packages/client" ] && [ "$dir" == "packages/gateway" ] ; then
echo "Skipping $dir"
else
echo "Removing $dir"
rm -rf "$dir"
fi
fi
done
- name: Cache Node.js dependencies
uses: actions/cache@v4
with:
path: |
**/node_modules
~/.cache/yarn/v6
key: node-${{ hashFiles('**/yarn.lock', format('{0}/{1}',matrix.package,'package.json')) }}
packages/client/node_modules
packages/commons/node_modules
packages/components/node_modules
key: ${{ runner.os }}-node-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-node-
- name: Verify every file has a license header
if: steps.check-scripts.outputs.skip != 'true'
run: npx license-check-and-add check -f license-config.json

- name: Runs dependency installation
if: steps.check-scripts.outputs.skip != 'true'
run: CI="" yarn install --frozen-lockfile

# TODO: Move out of the matrix to be built once and shared
- name: Build common package
if: steps.check-scripts.outputs.skip != 'true'
run: cd packages/commons && yarn build
Expand All @@ -112,14 +79,59 @@ jobs:
if: steps.check-scripts.outputs.skip != 'true'
run: cd packages/components && yarn build

# TODO: should run parallel to unit tests as can take as much as unit tests
- name: Upload build artifacts
if: steps.check-scripts.outputs.skip != 'true'
uses: actions/upload-artifact@v3
with:
name: client-build
path: |
packages/commons/build
packages/components/build
test:
needs: [setup, build]
runs-on: ubuntu-22.04
strategy:
fail-fast: false
matrix:
shard: [1/4, 2/4, 3/4, 4/4]

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Download build artifacts
uses: actions/download-artifact@v3
with:
name: client-build
path: packages/

- name: Use Node.js from .nvmrc
uses: actions/setup-node@v4
with:
node-version-file: .nvmrc

- name: Cache node modules
uses: actions/cache@v4
with:
path: |
packages/client/node_modules
packages/commons/node_modules
packages/components/node_modules
key: ${{ runner.os }}-node-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-node-
- name: Runs dependency installation
run: CI="" yarn install --frozen-lockfile

- name: Run linting
if: steps.check-scripts.outputs.skip != 'true' && steps.check-scripts.outputs.skip-lint != 'true'
run: cd ${{ matrix.package }} && yarn lint
run: cd packages/client && yarn lint

- name: Run Unit Test
if: steps.check-scripts.outputs.skip != 'true' && steps.check-scripts.outputs.skip-test != 'true'
run: cd ${{ matrix.package }} && yarn test --shard ${{ matrix.shard }}
run: cd packages/client && yarn test --shard ${{ matrix.shard }}

security-scans:
needs: setup
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/lint-and-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ jobs:
- name: Get list of packages
id: set-matrix
run: |
PACKAGES=$(ls -d packages/* | grep -v 'packages/client\|packages/login' | jq -R -s -c 'split("\n")[:-1]')
PACKAGES=$(ls -d packages/* | grep -v 'packages/client' | jq -R -s -c 'split("\n")[:-1]')
echo "Found packages: $PACKAGES"
echo "matrix=${PACKAGES}" >> $GITHUB_OUTPUT
Expand Down

0 comments on commit c09a8c1

Please sign in to comment.