Skip to content

FILE-13 - Add more test coverage #178

FILE-13 - Add more test coverage

FILE-13 - Add more test coverage #178

Workflow file for this run

name: ci
on:
workflow_dispatch:
push:
branches:
- main
tags:
- "*"
pull_request:
branches:
- main
env:
AWS_ACCOUNT_ID: ${{ secrets.PROD_AWS_ACCOUNT_NUMBER }}
AWS_REGION: us-west-2
permissions:
id-token: write # This is required for requesting the JWT
contents: write # This is required for actions/checkout
jobs:
build:
name: build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 18
cache: npm
- run: npm ci
# Separate cache for build dir, we reuse it in release publish workflow
- name: Cache build output
if: startsWith(github.ref, 'refs/tags/v')
uses: actions/cache@v3
id: build-cache
with:
path: dist
key: ${{ runner.os }}-${{ github.sha }}
- name: Confirm build works
if: steps.build-cache.outputs.cache-hit != 'true'
run: npm run build
# Persist produced build dir:
# - this is not for releases, but for quick testing during the dev
# - action artifacts can be downloaded for 90 days, then are removed by github
- name: Attach produced build to Github Action
uses: actions/upload-artifact@v2
with:
name: saturn-${{ github.sha }}
path: dist
if-no-files-found: error
build-webui:
name: build-webui
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 18
cache: npm
- run: npm ci
# Separate cache for build dir, we reuse it in release publish workflow
- name: Cache build output
if: startsWith(github.ref, 'refs/tags/v')
uses: actions/cache@v3
id: build-cache
with:
path: dist
key: ${{ runner.os }}-${{ github.sha }}-webui
- name: Confirm build works
if: steps.build-cache.outputs.cache-hit != 'true'
run: npm run build
# Persist produced build dir:
# - this is not for releases, but for quick testing during the dev
# - action artifacts can be downloaded for 90 days, then are removed by github
- name: Attach produced build to Github Action
uses: actions/upload-artifact@v2
with:
name: saturn-webui-${{ github.sha }}
path: dist
if-no-files-found: error
test-unit:
name: "test:unit"
needs: [build, build-webui]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 18
cache: npm
- run: npm ci
- name: Run unit tests
run: npm run test:unit
test-e2e:
name: "test:e2e"
needs: [build, build-webui]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 18
cache: npm
- run: npm ci
- name: Run E2E tests
run: npm run test:e2e
- name: Run WebUI E2E tests
run: npm run test:webui-e2e
# separate check for TS
typecheck:
name: typecheck
needs: [build, build-webui]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 18
cache: npm
- run: npm ci
- name: Fancy Typecheck with GH annotations
uses: gozala/[email protected]
with:
project: tsconfig.json
# make sure local check is also ok
- name: Userland check
run: npm run typecheck
# separate check for eslint
eslint:
name: eslint
needs: [build, build-webui]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 18
cache: npm
- run: npm ci
- name: ESLint
run: npm run eslint
release-webui:
if: startsWith(github.ref, 'refs/tags/v')
name: release-webui
needs: [build, build-webui, test-unit, test-e2e, typecheck, eslint]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 18
cache: npm
# Reuse tag build
- name: Cache build dir
uses: actions/cache@v3
id: build-cache
with:
path: dist
key: ${{ runner.os }}-${{ github.sha }}-webui
- name: Install and Build 🔧
if: steps.build-cache.outputs.cache-hit != 'true'
run: |
npm ci
npm run build
- name: Create archive
run: |
cd dist
tar -czf ../saturn-webui.tar.gz *
- name: Release
uses: softprops/action-gh-release@v1
with:
files: saturn-webui.tar.gz
deploy:
if: startsWith(github.ref, 'refs/tags/v')
name: deploy
needs: [build, build-webui, test-unit, test-e2e, typecheck, eslint]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-region: ${{ env.AWS_REGION }}
role-to-assume: arn:aws:iam::${{ secrets.PROD_AWS_ACCOUNT_NUMBER }}:role/L1-dashboard-ci
- uses: actions/setup-node@v3
with:
node-version: 18
cache: npm
# Reuse tag build
- name: Cache build dir
uses: actions/cache@v3
id: build-cache
with:
path: dist
key: ${{ runner.os }}-${{ github.sha }}
- name: Install and Build 🔧
if: steps.build-cache.outputs.cache-hit != 'true'
run: |
npm ci
npm run build
- name: Push to S3
env:
BUCKET: filecoin-saturn
run: |
aws s3 cp dist/index.html s3://$BUCKET/index.html \
--cache-control "no-cache" --only-show-errors
aws s3 cp dist/assets s3://$BUCKET/assets/ --recursive \
--cache-control "public, max-age=2592000" --only-show-errors