From b685b9582e46c5f518b44e0676d57f65cebb59f3 Mon Sep 17 00:00:00 2001 From: John Hill Date: Wed, 21 Jun 2023 13:54:14 -0700 Subject: [PATCH] [CI]Add docker and npm caching (#6748) --- .github/workflows/e2e-couchdb.yml | 33 ++++++++++++++--- .github/workflows/e2e-pr.yml | 55 +++++++++------------------- .github/workflows/npm-prerelease.yml | 4 +- .github/workflows/pr-platform.yml | 46 ++++++++++++++++++++--- .prettierrc | 3 +- 5 files changed, 89 insertions(+), 52 deletions(-) diff --git a/.github/workflows/e2e-couchdb.yml b/.github/workflows/e2e-couchdb.yml index e442800b72..016003c6b7 100644 --- a/.github/workflows/e2e-couchdb.yml +++ b/.github/workflows/e2e-couchdb.yml @@ -7,15 +7,33 @@ on: - opened jobs: e2e-couchdb: - if: ${{ github.event.label.name == 'pr:e2e:couchdb' }} || ${{ github.event.action == 'opened' }} + if: github.event.label.name == 'pr:e2e:couchdb' || github.event.action == 'opened' && github.actor == 'dependabot[bot]' runs-on: ubuntu-latest + timeout-minutes: 60 steps: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: - node-version: 'lts/gallium' + node-version: 'lts/hydrogen' + + - name: Cache NPM dependencies + uses: actions/cache@v3 + with: + path: ~/.npm + key: ${{ runner.os }}-node-${{ hashFiles('**/package.json') }} + restore-keys: | + ${{ runner.os }}-node- + + - run: npm install --cache ~/.npm --prefer-offline --no-audit --progress=false + + - name: Login to DockerHub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + - run: npx playwright@1.32.3 install - - run: npm install + - name: Start CouchDB Docker Container and Init with Setup Scripts run: | export $(cat src/plugins/persistence/couch/.env.ci | xargs) @@ -23,26 +41,31 @@ jobs: sleep 3 bash src/plugins/persistence/couch/setup-couchdb.sh bash src/plugins/persistence/couch/replace-localstorage-with-couchdb-indexhtml.sh + - name: Run CouchDB Tests and publish to deploysentinel env: DEPLOYSENTINEL_API_KEY: ${{ secrets.DEPLOYSENTINEL_API_KEY }} run: npm run test:e2e:couchdb + - name: Publish Results to Codecov.io env: SUPER_SECRET: ${{ secrets.CODECOV_TOKEN }} run: npm run cov:e2e:full:publish + - name: Archive test results if: success() || failure() uses: actions/upload-artifact@v3 with: path: test-results + - name: Archive html test results if: success() || failure() uses: actions/upload-artifact@v3 with: path: html-test-results + - name: Remove pr:e2e:couchdb label (if present) - if: ${{ contains(github.event.pull_request.labels.*.name, 'pr:e2e:couchdb') }} + if: always() uses: actions/github-script@v6 with: script: | @@ -56,5 +79,5 @@ jobs: name: labelToRemove }); } catch (error) { - core.warning(`Failed to remove 'pr:e2e:couchdb' label: ${error.message}`); + core.warning(`Failed to remove ' + labelToRemove + ' label: ${error.message}`); } diff --git a/.github/workflows/e2e-pr.yml b/.github/workflows/e2e-pr.yml index 62cd32dba9..0e4a8d9a9d 100644 --- a/.github/workflows/e2e-pr.yml +++ b/.github/workflows/e2e-pr.yml @@ -7,31 +7,31 @@ on: - opened jobs: e2e-full: - if: ${{ github.event.label.name == 'pr:e2e' }} + if: github.event.label.name == 'pr:e2e' || github.event.action == 'opened' && github.actor == 'dependabot[bot]' runs-on: ${{ matrix.os }} + timeout-minutes: 60 strategy: matrix: os: - ubuntu-latest - windows-latest steps: - - name: Trigger Success - uses: actions/github-script@v6 - with: - script: | - github.rest.issues.createComment({ - issue_number: context.issue.number, - owner: "nasa", - repo: "openmct", - body: 'Started e2e Run. Follow along: https://github.com/nasa/openmct/actions/runs/' + context.runId - }) - uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: - node-version: '16' + node-version: 'lts/hydrogen' + + - name: Cache NPM dependencies + uses: actions/cache@v3 + with: + path: ~/.npm + key: ${{ runner.os }}-node-${{ hashFiles('**/package.json') }} + restore-keys: | + ${{ runner.os }}-node- + - run: npx playwright@1.32.3 install - run: npx playwright install chrome-beta - - run: npm install + - run: npm install --cache ~/.npm --prefer-offline --no-audit --progress=false - run: npm run test:e2e:full -- --max-failures=40 - run: npm run cov:e2e:report || true - shell: bash @@ -44,30 +44,9 @@ jobs: uses: actions/upload-artifact@v3 with: path: test-results - - name: Test success - if: ${{ success() }} - uses: actions/github-script@v6 - with: - script: | - github.rest.issues.createComment({ - issue_number: context.issue.number, - owner: "nasa", - repo: "openmct", - body: 'Success ✅ ! Build artifacts are here: https://github.com/nasa/openmct/actions/runs/' + context.runId - }) - - name: Test failure - if: ${{ failure() }} - uses: actions/github-script@v6 - with: - script: | - github.rest.issues.createComment({ - issue_number: context.issue.number, - owner: "nasa", - repo: "openmct", - body: 'Failure ❌ ! Build artifacts are here: https://github.com/nasa/openmct/actions/runs/' + context.runId - }) + - name: Remove pr:e2e label (if present) - if: ${{ contains(github.event.pull_request.labels.*.name, 'pr:e2e') }} + if: always() uses: actions/github-script@v6 with: script: | @@ -81,5 +60,5 @@ jobs: name: labelToRemove }); } catch (error) { - core.warning(`Failed to remove 'pr:e2e' label: ${error.message}`); - } + core.warning(`Failed to remove ' + labelToRemove + ' label: ${error.message}`); + } \ No newline at end of file diff --git a/.github/workflows/npm-prerelease.yml b/.github/workflows/npm-prerelease.yml index a9321ac569..605ebe8bba 100644 --- a/.github/workflows/npm-prerelease.yml +++ b/.github/workflows/npm-prerelease.yml @@ -14,7 +14,7 @@ jobs: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: - node-version: 16 + node-version: lts/hydrogen - run: npm install - run: | echo "//registry.npmjs.org/:_authToken=$NODE_AUTH_TOKEN" >> ~/.npmrc @@ -29,7 +29,7 @@ jobs: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: - node-version: 16 + node-version: lts/hydrogen registry-url: https://registry.npmjs.org/ - run: npm install - run: npm publish --access=public --tag unstable diff --git a/.github/workflows/pr-platform.yml b/.github/workflows/pr-platform.yml index f56ff576c2..1f1cdfbaa1 100644 --- a/.github/workflows/pr-platform.yml +++ b/.github/workflows/pr-platform.yml @@ -2,12 +2,15 @@ name: 'pr-platform' on: workflow_dispatch: pull_request: - types: [labeled] + types: + - labeled + - opened jobs: - e2e-full: - if: ${{ github.event.label.name == 'pr:platform' }} + pr-platform: + if: github.event.label.name == 'pr:platform' || github.event.action == 'opened' && github.actor == 'dependabot[bot]' runs-on: ${{ matrix.os }} + timeout-minutes: 60 strategy: fail-fast: false matrix: @@ -16,18 +19,49 @@ jobs: - macos-latest - windows-latest node_version: - - 16 - - 18 + - lts/gallium + - lts/hydrogen architecture: - x64 + name: Node ${{ matrix.node_version }} - ${{ matrix.architecture }} on ${{ matrix.os }} steps: - uses: actions/checkout@v3 + - name: Setup node uses: actions/setup-node@v3 with: node-version: ${{ matrix.node_version }} architecture: ${{ matrix.architecture }} - - run: npm install + + - name: Cache NPM dependencies + uses: actions/cache@v3 + with: + path: ~/.npm + key: ${{ runner.os }}-${{ matrix.node_version }}-${{ hashFiles('**/package.json') }} + restore-keys: | + ${{ runner.os }}-${{ matrix.node_version }}- + + - run: npm install --cache ~/.npm --prefer-offline --no-audit --progress=false + - run: npm test + - run: npm run lint -- --quiet + + - name: Remove pr:platform label (if present) + if: always() + uses: actions/github-script@v6 + with: + script: | + const { owner, repo, number } = context.issue; + const labelToRemove = 'pr:platform'; + try { + await github.rest.issues.removeLabel({ + owner, + repo, + issue_number: number, + name: labelToRemove + }); + } catch (error) { + core.warning(`Failed to remove ' + labelToRemove + ' label: ${error.message}`); + } diff --git a/.prettierrc b/.prettierrc index aaae3c5c5f..479112ec1d 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,5 +1,6 @@ { "trailingComma": "none", "singleQuote": true, - "printWidth": 100 + "printWidth": 100, + "endOfLine": "auto" }