mirror of
https://github.com/cypress-io/cypress.git
synced 2025-12-31 19:49:54 -06:00
178 lines
7.6 KiB
YAML
178 lines
7.6 KiB
YAML
name: Update V8 Snapshot Cache
|
|
on:
|
|
schedule:
|
|
# Run everyday except Wednesday at 00:00 UTC
|
|
- cron: '0 0 * * 0,1,2,4,5,6'
|
|
# Run every Wednesday at 00:00 UTC
|
|
- cron: '0 0 * * 3'
|
|
push:
|
|
branches:
|
|
- 'release/**'
|
|
paths-ignore:
|
|
- .husky/**
|
|
- .vscode/**
|
|
- .eslintrc.js
|
|
- .gitattributes
|
|
- .gitignore
|
|
- .percy.yml
|
|
- .prettierignore
|
|
- .releaserc.js
|
|
- .yarnclean
|
|
- CHANGELOG.md
|
|
- CODE_OF_CONDUCT.md
|
|
- CONTRIBUTING.md
|
|
- LICENSE
|
|
- README.md
|
|
- ROADMAP.md
|
|
- SECURITY.md
|
|
workflow_dispatch:
|
|
inputs:
|
|
branch:
|
|
description: 'Branch to update'
|
|
required: true
|
|
default: 'develop'
|
|
generate_from_scratch:
|
|
description: 'Generate from scratch'
|
|
type: boolean
|
|
default: false
|
|
commit_directly_to_branch:
|
|
description: 'Commit directly to branch'
|
|
type: boolean
|
|
default: false
|
|
concurrency:
|
|
group: ${{ inputs.branch || github.ref }}
|
|
cancel-in-progress: true
|
|
jobs:
|
|
update-v8-snapshot-cache:
|
|
strategy:
|
|
max-parallel: 3
|
|
matrix:
|
|
platform: [ubuntu-latest, macos-latest, windows-latest]
|
|
runs-on: ${{ matrix.platform }}
|
|
if: github.repository == 'cypress-io/cypress'
|
|
permissions:
|
|
pull-requests: write
|
|
env:
|
|
CYPRESS_BOT_APP_ID: ${{ secrets.RAM_APP }}
|
|
BASE_BRANCH: ${{ inputs.branch || github.ref_name }}
|
|
# Flex the generate from scratch option based on manual input or if we are on the weekly schedule
|
|
GENERATE_FROM_SCRATCH: ${{ inputs.generate_from_scratch == true || (github.event_name == 'schedule' && github.event.schedule == '0 0 * * 3') }}
|
|
steps:
|
|
- name: Determine snapshot files - Windows
|
|
if: ${{ matrix.platform == 'windows-latest' }}
|
|
run: |
|
|
echo "SNAPSHOT_FILES='tooling\v8-snapshot\cache\win32\snapshot-meta.json'" >> $GITHUB_ENV
|
|
echo "PLATFORM=windows" >> $GITHUB_ENV
|
|
shell: bash
|
|
- name: Determine snapshot files - Linux
|
|
if: ${{ matrix.platform == 'ubuntu-latest' }}
|
|
run: |
|
|
echo "SNAPSHOT_FILES='tooling/v8-snapshot/cache/linux/snapshot-meta.json'" >> $GITHUB_ENV
|
|
echo "PLATFORM=linux" >> $GITHUB_ENV
|
|
- name: Determine snapshot files - Mac
|
|
if: ${{ matrix.platform == 'macos-latest' }}
|
|
run: |
|
|
echo "SNAPSHOT_FILES='tooling/v8-snapshot/cache/darwin/snapshot-meta.json'" >> $GITHUB_ENV
|
|
echo "PLATFORM=darwin" >> $GITHUB_ENV
|
|
- name: Install setuptools - Mac
|
|
if: ${{ matrix.platform == 'macos-latest' }}
|
|
run: sudo -H pip install setuptools
|
|
- name: Checkout
|
|
uses: actions/checkout@v6
|
|
with:
|
|
fetch-depth: 0
|
|
token: ${{ secrets.BOT_GITHUB_ACTION_TOKEN }}
|
|
ref: ${{ env.BASE_BRANCH }}
|
|
- name: Set committer info
|
|
## attribute the commit to cypress-bot: https://github.community/t/logging-into-git-as-a-github-app/115916
|
|
run: |
|
|
git config --local user.email "${{ env.CYPRESS_BOT_APP_ID }}+cypress-bot[bot]@users.noreply.github.com"
|
|
git config --local user.name "cypress-bot[bot]"
|
|
- name: Set up Node.js
|
|
uses: actions/setup-node@v4
|
|
with:
|
|
node-version: 22
|
|
cache: 'yarn'
|
|
- name: Run yarn
|
|
# set the timeout here to try and deal with Windows slowness
|
|
run: yarn --network-timeout 300000
|
|
- name: Run build
|
|
run: yarn build
|
|
- name: Generate prod snapshot from scratch
|
|
if: ${{ env.GENERATE_FROM_SCRATCH == 'true' }}
|
|
run: yarn cross-env V8_SNAPSHOT_FROM_SCRATCH=1 V8_UPDATE_METAFILE=1 yarn build-v8-snapshot-prod
|
|
- name: Generate prod snapshot iteratively
|
|
if: ${{ env.GENERATE_FROM_SCRATCH != 'true' }}
|
|
run: yarn cross-env V8_UPDATE_METAFILE=1 yarn build-v8-snapshot-prod
|
|
- name: Check for v8 snapshot cache changes
|
|
id: check-for-v8-snapshot-cache-changes
|
|
run: |
|
|
echo "has_changes=$(test "$(git status --porcelain -- ${{ env.SNAPSHOT_FILES }})" && echo 'true')" >> $GITHUB_OUTPUT
|
|
shell: bash
|
|
- name: Determine branch name - commit directly to branch
|
|
if: ${{ inputs.commit_directly_to_branch == true }}
|
|
run: |
|
|
echo "BRANCH_NAME=${{ env.BASE_BRANCH }}" >> $GITHUB_ENV
|
|
echo "BRANCH_EXISTS=true" >> $GITHUB_ENV
|
|
shell: bash
|
|
- name: Determine branch name - commit to separate branch
|
|
if: ${{ inputs.commit_directly_to_branch != true }}
|
|
run: |
|
|
echo "BRANCH_NAME=update-v8-snapshot-cache-on-${{ env.BASE_BRANCH }}-${{ env.PLATFORM }}" >> $GITHUB_ENV
|
|
echo "BRANCH_EXISTS=$(git show-ref --verify --quiet refs/remotes/origin/update-v8-snapshot-cache-on-${{ env.BASE_BRANCH }}-${{ env.PLATFORM }} && echo 'true')" >> $GITHUB_ENV
|
|
shell: bash
|
|
- name: Check number of existing prs
|
|
id: check-number-of-existing-prs
|
|
run: |
|
|
echo "number_of_prs_for_branch=$(gh api '/repos/cypress-io/cypress/pulls?head=cypress-io:${{ env.BRANCH_NAME }}' --jq length)" >> $GITHUB_OUTPUT
|
|
env:
|
|
GH_TOKEN: ${{ secrets.BOT_GITHUB_ACTION_TOKEN }}
|
|
shell: bash
|
|
- name: Check need for PR or branch update
|
|
id: check-need-for-pr
|
|
run: |
|
|
echo "needs_pr=${{ steps.check-for-v8-snapshot-cache-changes.outputs.has_changes == 'true' && env.BRANCH_NAME != env.BASE_BRANCH && steps.check-number-of-existing-prs.outputs.number_of_prs_for_branch == '0' }}" >> $GITHUB_OUTPUT
|
|
echo "needs_branch_update=${{ steps.check-for-v8-snapshot-cache-changes.outputs.has_changes == 'true' && env.BRANCH_EXISTS == 'true' }}" >> $GITHUB_OUTPUT
|
|
env:
|
|
GH_TOKEN: ${{ secrets.BOT_GITHUB_ACTION_TOKEN }}
|
|
shell: bash
|
|
## Update available and a branch/PR already exists
|
|
- name: Checkout existing branch
|
|
if: ${{ steps.check-need-for-pr.outputs.needs_branch_update == 'true' }}
|
|
run: |
|
|
git stash push -- ${{ env.SNAPSHOT_FILES }}
|
|
git reset --hard
|
|
git checkout ${{ env.BRANCH_NAME }}
|
|
git pull origin ${{ env.BRANCH_NAME }}
|
|
git merge -Xtheirs stash
|
|
## Update available and a PR doesn't already exist
|
|
- name: Checkout new branch
|
|
if: ${{ steps.check-need-for-pr.outputs.needs_branch_update != 'true' }}
|
|
run: git checkout -b ${{ env.BRANCH_NAME }} ${{ env.BASE_BRANCH }}
|
|
## Commit changes if present
|
|
- name: Commit the changes
|
|
if: ${{ steps.check-for-v8-snapshot-cache-changes.outputs.has_changes == 'true' }}
|
|
run: |
|
|
git diff-index --quiet HEAD || git commit -am "chore: updating v8 snapshot cache"
|
|
## Push branch
|
|
- name: Push branch to remote
|
|
if: ${{ steps.check-for-v8-snapshot-cache-changes.outputs.has_changes == 'true' }}
|
|
run: git push origin ${{ env.BRANCH_NAME }}
|
|
# PR needs to be created
|
|
- name: Create Pull Request
|
|
if: ${{ steps.check-need-for-pr.outputs.needs_pr == 'true' }}
|
|
uses: actions/github-script@v7
|
|
with:
|
|
script: |
|
|
const { createPullRequest } = require('./scripts/github-actions/create-pull-request.js')
|
|
|
|
await createPullRequest({
|
|
context,
|
|
github,
|
|
baseBranch: '${{ env.BASE_BRANCH }}',
|
|
branchName: '${{ env.BRANCH_NAME }}',
|
|
description: 'Update v8 snapshot cache - ${{ env.PLATFORM }}',
|
|
body: 'This PR was automatically generated by the [update-v8-snapshot-cache](https://github.com/cypress-io/cypress/actions/workflows/update_v8_snapshot_cache.yml) github action.',
|
|
reviewers: ['ryanthemanuel']
|
|
})
|