# 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, develop] tags: - v* pull_request: branches: [main, develop] # 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@v3 with: fetch-depth: 0 - name: Cache node modules uses: actions/cache@v3 env: cache-name: cache-node-modules with: path: ./common/temp key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/pnpm-lock.yaml') }} restore-keys: | ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/pnpm-lock.yaml') }} - name: Cache PR common uses: actions/cache@v3 with: path: ./common/temp key: ${{ runner.os }}-build-ref-${{ github.ref }} restore-keys: | ${{ runner.os }}-build-ref-${{ github.ref }} - 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: Cache build results for next jobs uses: actions/cache@v3 env: cache-name: cache-build-results with: path: | cloud 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@v3 with: fetch-depth: 0 - name: Cache build results uses: actions/cache@v3 env: cache-name: cache-build-results with: path: | cloud 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@v3 with: fetch-depth: 0 - name: Cache build results uses: actions/cache@v3 env: cache-name: cache-build-results with: path: | cloud 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@v3 with: fetch-depth: 0 - name: Cache build results uses: actions/cache@v3 env: cache-name: cache-build-results with: path: | cloud 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: Start MongoDB uses: supercharge/mongodb-github-action@1.9.0 with: mongodb-version: 5.0 - name: Testing... uses: paambaati/codeclimate-action@v3.2.0 env: CC_TEST_REPORTER_ID: 346a83855d7124e9da8e6ec36a4fd01dc432f5cdc755eb28da7d9c44da9d1142 with: coverageCommand: node common/scripts/install-run-rush.js test --verbose coverageLocations: | ${{github.workspace}}/packages/*/coverage/lcov.info:lcov ${{github.workspace}}/server/*/coverage/lcov.info:lcov uitest: needs: build runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 with: fetch-depth: 0 - name: Cache build results uses: actions/cache@v3 env: cache-name: cache-build-results with: path: | cloud 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: Bundle run: node common/scripts/install-run-rush.js bundle --verbose - name: Docker build run: node common/scripts/install-run-rush.js docker:build --verbose - name: Login to Docker Hub uses: docker/login-action@v2 with: username: hardcoreeng password: ${{ secrets.DOCKER_ACCESS_TOKEN }} - 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: Upload test results if: always() uses: actions/upload-artifact@v3 with: name: playwright-results path: ./tests/sanity/playwright-report/ 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@v3 with: fetch-depth: 0 - name: Cache build results uses: actions/cache@v3 env: cache-name: cache-build-results with: path: | cloud 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 - name: Login to Docker Hub uses: docker/login-action@v2 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