Update metrics url (#59) #187
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: 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 |