From 5edbd856a13b3a61449b13d4e453c15bd543a177 Mon Sep 17 00:00:00 2001 From: Evan Jacobs <570070+probablyup@users.noreply.github.com> Date: Thu, 14 Sep 2023 12:36:23 -0400 Subject: [PATCH] chore: skip actions if source files have not changed (#3880) * chore: skip benchmark action if source files have not changed * chore: test alternate strategy * chore: standardize around nvmrc file * chore: try shared setup * chore: watch for relevant changes * chore: consolidate workflows * chore: normalize names --------- Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com> --- .github/workflows/benchmark.yml | 60 ------------ .github/workflows/ci.yml | 152 +++++++++++++++++++++++++++++++ .github/workflows/playwright.yml | 45 --------- .github/workflows/release.yml | 2 +- .github/workflows/size.yml | 16 ---- .github/workflows/test.yml | 37 -------- .nvmrc | 1 + 7 files changed, 154 insertions(+), 159 deletions(-) delete mode 100644 .github/workflows/benchmark.yml create mode 100644 .github/workflows/ci.yml delete mode 100644 .github/workflows/playwright.yml delete mode 100644 .github/workflows/size.yml delete mode 100644 .github/workflows/test.yml create mode 100644 .nvmrc diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml deleted file mode 100644 index 0d3976027..000000000 --- a/.github/workflows/benchmark.yml +++ /dev/null @@ -1,60 +0,0 @@ -name: Performance - -on: - pull_request: - push: - branches: [main] - -jobs: - benchmark: - runs-on: ubuntu-latest - - strategy: - fail-fast: false - matrix: - node: ['18.x'] - - name: Test on node ${{ matrix.node }} - - steps: - - uses: actions/checkout@v3 - - - name: Use Node.js ${{ matrix.node }} - uses: actions/setup-node@v3 - with: - cache: yarn - node-version: ${{ matrix.node }} - - - name: Install & build - run: | - node --version - npm --version - yarn --version - yarn install --frozen-lockfile - yarn build:benchmark - - - name: Download previous benchmark data - uses: actions/cache@v3 - with: - path: ./benchmark-cache - key: ${{ runner.os }}-benchmark - - - name: Run benchmark - run: yarn benchmark - - - name: Store benchmark result - uses: benchmark-action/github-action-benchmark@v1 - with: - tool: benchmarkjs - external-data-json-path: ./benchmark-cache/benchmark-data.json - output-file-path: output.txt - # comment for PRs that's updated with current perf relative to baseline (main) - summary-always: true - # warn if slowness is detected; might be transient on rerun - alert-threshold: 110% - comment-on-alert: true - fail-on-alert: true - # if things get considerably slower, deny the PR - fail-threshold: 120% - # needed for commenting on PRs - github-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 000000000..9a36bf0fb --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,152 @@ +name: ci + +on: + pull_request: + push: + branches: [main] + +jobs: + detectChangedSourceFiles: + name: 'determine changes' + runs-on: ubuntu-latest + outputs: + changes: ${{ steps.changed-files-yaml.outputs.src_any_changed }} + steps: + - uses: actions/checkout@v3 + - name: Detect changed files + id: changed-files-yaml + uses: tj-actions/changed-files@v39 + with: + files_yaml: | + src: + - packages/formik/src/** + - packages/formik/package.json + - packages/formik-native/src/** + - packages/formik-native/package.json + benchmark: + if: needs.detectChangedSourceFiles.outputs.changes == 'true' + runs-on: ubuntu-latest + strategy: + fail-fast: false + steps: + - uses: actions/checkout@v3 + + - uses: actions/setup-node@v3 + with: + cache: yarn + node-version-file: .nvmrc + + - name: Detect changed files + id: changed-files-yaml + uses: tj-actions/changed-files@v39 + with: + files_yaml: | + src: + - packages/formik/src/** + - packages/formik-native/src/** + + - name: Install & build + run: | + node --version + npm --version + yarn --version + yarn install --frozen-lockfile + yarn build:benchmark + + - name: Download previous benchmark data + uses: actions/cache@v3 + with: + path: ./benchmark-cache + key: ${{ runner.os }}-benchmark + + - name: Run benchmark + run: yarn benchmark + + - name: Store benchmark result + uses: benchmark-action/github-action-benchmark@v1 + with: + tool: benchmarkjs + external-data-json-path: ./benchmark-cache/benchmark-data.json + output-file-path: output.txt + # comment for PRs that's updated with current perf relative to baseline (main) + summary-always: true + # warn if slowness is detected; might be transient on rerun + alert-threshold: 110% + comment-on-alert: true + fail-on-alert: true + # if things get considerably slower, deny the PR + fail-threshold: 120% + # needed for commenting on PRs + github-token: ${{ secrets.GITHUB_TOKEN }} + interaction: + if: needs.detectChangedSourceFiles.outputs.changes == 'true' + timeout-minutes: 10 + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + cache: yarn + node-version-file: .nvmrc + + - name: Install dependencies + run: yarn install --frozen-lockfile + + - name: Get installed Playwright version + id: playwright-version + run: echo "PLAYWRIGHT_VERSION=$(node -e "console.log(require('./package-lock.json').dependencies['@playwright/test'].version)")" >> $GITHUB_ENV + + - name: Cache playwright binaries + uses: actions/cache@v3 + id: playwright-cache + with: + path: | + ~/.cache/ms-playwright + key: ${{ runner.os }}-playwright-${{ env.PLAYWRIGHT_VERSION }} + + - name: Install Playwright Browsers + run: yarn playwright install --with-deps + if: steps.playwright-cache.outputs.cache-hit != 'true' + - run: yarn playwright install-deps + if: steps.playwright-cache.outputs.cache-hit != 'true' + + - name: Run Playwright tests + run: yarn playwright test + - uses: actions/upload-artifact@v3 + if: always() + with: + name: playwright-report + path: playwright-report/ + retention-days: 5 + size: + if: needs.detectChangedSourceFiles.outputs.changes == 'true' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 1 + - uses: preactjs/compressed-size-action@v2 + with: + repo-token: '${{ secrets.GITHUB_TOKEN }}' + build-script: 'turbo run build --filter {./packages/*}...' + unit: + if: needs.detectChangedSourceFiles.outputs.changes == 'true' + runs-on: ubuntu-latest + strategy: + fail-fast: false + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + cache: yarn + node-version-file: .nvmrc + - name: Install deps, build, and test + run: | + node --version + npm --version + yarn --version + yarn install --frozen-lockfile + yarn test --coverage + env: + CI: true + NODE_OPTIONS: --max-old-space-size=4096 \ No newline at end of file diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml deleted file mode 100644 index a720fa902..000000000 --- a/.github/workflows/playwright.yml +++ /dev/null @@ -1,45 +0,0 @@ -name: Playwright Tests -on: - push: - branches: [main] - pull_request: -jobs: - test: - timeout-minutes: 10 - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 - with: - cache: yarn - node-version: 18 - - - name: Install dependencies - run: yarn install --frozen-lockfile - - - name: Get installed Playwright version - id: playwright-version - run: echo "PLAYWRIGHT_VERSION=$(node -e "console.log(require('./package-lock.json').dependencies['@playwright/test'].version)")" >> $GITHUB_ENV - - - name: Cache playwright binaries - uses: actions/cache@v3 - id: playwright-cache - with: - path: | - ~/.cache/ms-playwright - key: ${{ runner.os }}-playwright-${{ env.PLAYWRIGHT_VERSION }} - - - name: Install Playwright Browsers - run: yarn playwright install --with-deps - if: steps.playwright-cache.outputs.cache-hit != 'true' - - run: yarn playwright install-deps - if: steps.playwright-cache.outputs.cache-hit != 'true' - - - name: Run Playwright tests - run: yarn playwright test - - uses: actions/upload-artifact@v3 - if: always() - with: - name: playwright-report - path: playwright-report/ - retention-days: 5 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3770d5738..83f605fa1 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -16,7 +16,7 @@ jobs: - uses: actions/setup-node@v3 with: cache: yarn - node-version: 18 + node-version-file: .nvmrc - name: Install Dependencies run: yarn install diff --git a/.github/workflows/size.yml b/.github/workflows/size.yml deleted file mode 100644 index 7c515450a..000000000 --- a/.github/workflows/size.yml +++ /dev/null @@ -1,16 +0,0 @@ -name: Compressed Size - -on: [pull_request] - -jobs: - build: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v3 - with: - fetch-depth: 1 - - uses: preactjs/compressed-size-action@v2 - with: - repo-token: '${{ secrets.GITHUB_TOKEN }}' - build-script: 'turbo run build --filter {./packages/*}...' diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml deleted file mode 100644 index 7d06aaaa0..000000000 --- a/.github/workflows/test.yml +++ /dev/null @@ -1,37 +0,0 @@ -name: Unit Test - -on: - pull_request: - push: - branches: [main] - -jobs: - test: - runs-on: ubuntu-latest - - strategy: - fail-fast: false - matrix: - node: ['18.x'] - - name: Test on node ${{ matrix.node }} - - steps: - - uses: actions/checkout@v3 - - - name: Use Node.js ${{ matrix.node }} - uses: actions/setup-node@v3 - with: - cache: yarn - node-version: ${{ matrix.node }} - - - name: Install deps, build, and test - run: | - node --version - npm --version - yarn --version - yarn install --frozen-lockfile - yarn test --coverage - env: - CI: true - NODE_OPTIONS: --max-old-space-size=4096 diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 000000000..3f430af82 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +v18