# This is a basic workflow to help you get started with Actions name: CI concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true # Controls when the action will run. on: # Triggers the workflow on push or pull request events but only for the main branch push: branches: [main] tags: - v* pull_request: branches: [main] # Allows you to run this workflow manually from the Actions tab workflow_dispatch: # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: # This workflow contains a single job called "build" build: # The type of runner that the job will run on runs-on: ubuntu-latest # Steps represent a sequence of tasks that will be executed as part of the job steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Cache node modules uses: actions/cache@v3 env: cache-name: cache-node-modules with: path: | ./common/temp !./common/temp/build-cache key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('./common/temp/pnpm-lock.yaml') }} restore-keys: | ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('./common/temp/pnpm-lock.yaml') }} - name: Cache Build cache uses: actions/cache@v3 with: path: ./common/temp/build-cache key: build-cache-${{ hashFiles('./common/temp/pnpm-lock.yaml') }} restore-keys: | build-cache-${{ hashFiles('./common/temp/pnpm-lock.yaml') }} - name: Checking for mis-matching dependencies... run: node common/scripts/install-run-rush.js check - name: Installing... run: node common/scripts/install-run-rush.js install - name: Setting model version from git release... run: node common/scripts/install-run-rush.js bump-model-version - name: Building... run: node common/scripts/install-run-rush.js build - name: Bundle run: node common/scripts/install-run-rush.js bundle --verbose - name: Cache build results for next jobs uses: actions/cache@v3 env: cache-name: cache-build-results with: path: | common deploy dev models packages plugins pods products server server-plugins templates tests rush.json .prettierrc tools key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ github.sha }} restore-keys: ${{ runner.os }}-build-${{ env.cache-name }}-${{ github.sha }} svelte-check: needs: build runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Cache build results uses: actions/cache@v3 env: cache-name: cache-build-results with: path: | common deploy dev models packages plugins pods products server server-plugins templates tests rush.json .prettierrc tools key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ github.sha }} restore-keys: ${{ runner.os }}-build-${{ env.cache-name }}-${{ github.sha }} - name: Checking svelte sources... run: node common/scripts/install-run-rush.js svelte-check formatting: needs: build runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Cache build results uses: actions/cache@v3 env: cache-name: cache-build-results with: path: | common deploy dev models packages plugins pods products server server-plugins templates tests rush.json .prettierrc tools key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ github.sha }} restore-keys: ${{ runner.os }}-build-${{ env.cache-name }}-${{ github.sha }} - name: Install... run: node common/scripts/install-run-rush.js install - name: Formatting... run: node common/scripts/install-run-rush.js fast-format - name: Check files formatting run: | echo '================================================================' echo 'Checking for diff files' echo '================================================================' git diff '*.ts' '*.svelte' | cat [ -z "$(git diff --name-only '*.ts' '*.svelte' | cat)" ] echo '================================================================' test: needs: build runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Cache build results uses: actions/cache@v3 env: cache-name: cache-build-results with: path: | common deploy dev models packages plugins pods products server server-plugins templates tests rush.json .prettierrc tools key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ github.sha }} restore-keys: ${{ runner.os }}-build-${{ env.cache-name }}-${{ github.sha }} - name: Cache Build cache uses: actions/cache@v3 with: path: ./common/temp/build-cache key: build-cache-${{ hashFiles('./common/temp/pnpm-lock.yaml') }} restore-keys: | build-cache-${{ hashFiles('./common/temp/pnpm-lock.yaml') }} - name: Start MongoDB uses: supercharge/mongodb-github-action@v1.10.0 with: mongodb-version: 5.0 - name: Testing... run: node common/scripts/install-run-rush.js test --verbose uitest: needs: build runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Cache Build cache uses: actions/cache@v3 with: path: ./common/temp/build-cache key: build-cache-${{ hashFiles('./common/temp/pnpm-lock.yaml') }} restore-keys: | build-cache-${{ hashFiles('./common/temp/pnpm-lock.yaml') }} - name: Cache build results uses: actions/cache@v3 env: cache-name: cache-build-results with: path: | common deploy dev models packages plugins pods products server server-plugins templates tests rush.json .prettierrc tools key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ github.sha }} restore-keys: ${{ runner.os }}-build-${{ env.cache-name }}-${{ github.sha }} - name: Installing... run: node common/scripts/install-run-rush.js install - name: Setting model version from git release... run: node common/scripts/install-run-rush.js bump-model-version - name: Building... run: node common/scripts/install-run-rush.js build - name: Bundle run: node common/scripts/install-run-rush.js bundle - name: Docker build run: node common/scripts/install-run-rush.js docker:build env: DOCKER_CLI_HINTS: false - name: Prepare server run: | cd ./tests ./prepare.sh - name: Install Playwright run: | cd ./tests/sanity node ../../common/scripts/install-run-rushx.js ci - name: Run UI tests run: | cd ./tests/sanity node ../../common/scripts/install-run-rushx.js uitest # - name: Archive DB # run: | # cd ./tests # ./update-snapshot-ci.sh ./tests/db_dump - name: "Store docker logs" if: always() run: | cd ./tests/sanity mkdir logs docker logs $(docker ps | grep transactor | cut -f 1 -d ' ') > logs/transactor.log docker logs $(docker ps | grep account | cut -f 1 -d ' ') > logs/account.log docker logs $(docker ps | grep front | cut -f 1 -d ' ') > logs/front.log - name: Upload test results if: always() uses: actions/upload-artifact@v3 with: name: playwright-results path: ./tests/sanity/playwright-report/ - name: Upload Logs if: always() uses: actions/upload-artifact@v3 with: name: docker-logs path: ./tests/sanity/logs # - name: Upload DB snapshot # if: always() # uses: actions/upload-artifact@v3 # with: # name: db-snapshot # path: ./tests/db_dump docker-build: if: ${{ github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v') }} needs: [build, uitest, test, svelte-check] runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Cache Build cache uses: actions/cache@v3 with: path: ./common/temp/build-cache key: build-cache-${{ hashFiles('./common/temp/pnpm-lock.yaml') }} restore-keys: | build-cache-${{ hashFiles('./common/temp/pnpm-lock.yaml') }} - name: Cache build results uses: actions/cache@v3 env: cache-name: cache-build-results with: path: | common deploy dev models packages plugins pods products server server-plugins templates tests rush.json .prettierrc tools key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ github.sha }} restore-keys: ${{ runner.os }}-build-${{ env.cache-name }}-${{ github.sha }} - name: Installing... run: node common/scripts/install-run-rush.js install - name: Setting model version from git release... run: node common/scripts/install-run-rush.js bump-model-version - name: Build, to include new model version run: node common/scripts/install-run-rush.js build - name: Bundle run: node common/scripts/install-run-rush.js bundle - name: Docker build run: node common/scripts/install-run-rush.js docker:build env: DOCKER_CLI_HINTS: false - name: Login to Docker Hub uses: docker/login-action@v3 with: username: hardcoreeng password: ${{ secrets.DOCKER_ACCESS_TOKEN }} - name: Docker push staging if: ${{ github.ref == 'refs/heads/main' }} run: node common/scripts/install-run-rush.js docker:staging - name: Docker push tag if: ${{ startsWith(github.ref, 'refs/tags/v') }} run: | echo Pushing release of tag ${{ github.ref }} node common/scripts/install-run-rush.js docker:push