| name: Install Playwright |
| description: Install Playwright and dependencies with cache |
|
|
| |
|
|
| inputs: |
| working-directory: |
| description: Where to install Playwright |
| default: ./ |
| browsers: |
| description: Browsers to install |
| default: chromium webkit firefox |
|
|
| outputs: |
| version: |
| description: Installed version of Playwright |
| value: ${{ steps.version.outputs.version }} |
| cache-hit: |
| description: Whether cache for Playwright was found |
| value: ${{ steps.cache.outputs.cache-hit }} |
|
|
| runs: |
| using: composite |
| steps: |
| - name: Get Playwright version |
| uses: actions/github-script@v7 |
| id: version |
| with: |
| script: | |
| const fs = require('fs'); |
| const path = require('path'); |
| |
| // Get working directory |
| const workingDirectory = "${{ inputs.working-directory }}"; |
| console.debug("Specified working directory:", workingDirectory); |
| if (workingDirectory) process.chdir(workingDirectory); |
| console.debug("Actual working directory:", process.cwd()); |
|
|
| // Read package.json |
| let version = ""; |
| try { |
| const packageJson = JSON.parse(fs.readFileSync('package.json', 'utf8')); |
| version = ( |
| packageJson.devDependencies?.['@playwright/test'] || |
| packageJson.dependencies?.['@playwright/test'] || |
| packageJson.dependencies?.['playwright'] || |
| packageJson.devDependencies?.['playwright'] |
| )?.replace(/[\^~]/g, ''); |
| } catch (error) { |
| console.log(error.message); |
| } |
|
|
| console.debug("Version:", version); |
| if (version) { |
| core.exportVariable("PLAYWRIGHT_VERSION", version); |
| core.setOutput("version", version); |
| } else core.setFailed("Couldn't get Playwright version"); |
|
|
| - name: Cache Playwright |
| id: cache |
| uses: actions/cache@v4 |
| with: |
| path: ~/.cache/ms-playwright |
| key: playwright-${{ env.PLAYWRIGHT_VERSION }} |
|
|
| - name: Install Playwright and its dependencies |
| shell: bash |
| if: steps.cache.outputs.cache-hit != 'true' |
| working-directory: ${{ inputs.working-directory }} |
| run: npx playwright install ${{ inputs.browsers }} --with-deps |
|
|
| - name: Install just Playwright's dependencies |
| shell: bash |
| if: steps.cache.outputs.cache-hit == 'true' |
| working-directory: ${{ inputs.working-directory }} |
| run: npx playwright install-deps |
|
|