-
Notifications
You must be signed in to change notification settings - Fork 302
Build and publish Cypress suite #16140
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 13 commits
c99616d
bcdf5b0
78aa148
e590b3f
faac69e
9bd5adb
db9f68b
4726358
a90cae5
2b514e3
c2bdccf
6bc7785
c11800e
55f3c22
2c6f7ed
9cb1ddb
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,59 @@ | ||
| name: Publish Cypress Suite Package | ||
|
|
||
| on: | ||
| push: | ||
| tags: | ||
| - 'cypress-pkg-v*' | ||
| workflow_call: | ||
| inputs: | ||
| tag: | ||
| required: false | ||
| type: string | ||
| outputs: | ||
| build-release-cypress-suite-status: | ||
| value: ${{ jobs.build.outputs.build-status }} | ||
|
|
||
| defaults: | ||
| run: | ||
| shell: bash | ||
| working-directory: ./cypress | ||
|
|
||
| jobs: | ||
| build: | ||
| runs-on: ubuntu-latest | ||
| permissions: | ||
| contents: read | ||
| packages: write | ||
| if: github.repository == 'rancher/dashboard' && (github.event_name == 'workflow_call' || (github.event_name == 'push' && github.event.ref == 'refs/tags/${{ github.ref_name }}')) | ||
| outputs: | ||
| build-status: ${{ job.status }} | ||
| steps: | ||
| - name: Checkout | ||
| uses: actions/checkout@v6 | ||
| with: | ||
| fetch-depth: 0 | ||
| persist-credentials: false | ||
|
|
||
| - name: Setup Node.js | ||
| uses: actions/setup-node@v6 | ||
| with: | ||
| node-version-file: '.nvmrc' | ||
| cache: 'yarn' | ||
|
|
||
| - uses: actions/setup-node@v6 | ||
| with: | ||
| node-version-file: '.nvmrc' | ||
| registry-url: 'https://registry.npmjs.org' | ||
| scope: '@rancher' | ||
|
|
||
| - name: Install packages | ||
| run: yarn install --frozen-lockfile | ||
|
|
||
| - name: Build Cypress Package | ||
| run: yarn build-pkg | ||
|
|
||
| - name: Publish Cypress Package to npm | ||
| run: yarn publish-pkg | ||
| env: | ||
| TAG: ${{ inputs.tag || github.ref_name }} | ||
| NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} | ||
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,144 +1,4 @@ | ||
| /* eslint-disable no-console */ | ||
| import { defineConfig } from 'cypress'; | ||
| import { removeDirectory } from 'cypress-delete-downloads-folder'; | ||
| import { getSpecPattern } from '@/scripts/cypress'; | ||
| import websocketTasks from './cypress/support/utils/webSocket-utils'; | ||
| import path from 'path'; | ||
| // Import and use the base configuration from cypress package | ||
| import baseConfig from './cypress/base-config'; | ||
|
|
||
| // Required for env vars to be available in cypress | ||
| require('dotenv').config(); | ||
|
|
||
| /** | ||
| * VARIABLES | ||
| */ | ||
| const hasCoverage = (process.env.TEST_INSTRUMENT === 'true') || false; // Add coverage if instrumented | ||
| let testDirs = ['priority', 'components', 'setup', 'pages', 'navigation', 'global-ui', 'features', 'extensions']; | ||
| const skipSetup = process.env.TEST_SKIP?.includes('setup'); | ||
| const baseUrl = (process.env.TEST_BASE_URL || 'https://localhost:8005').replace(/\/$/, ''); | ||
| const DEFAULT_USERNAME = 'admin'; | ||
| const username = process.env.TEST_USERNAME || DEFAULT_USERNAME; | ||
| const apiUrl = process.env.API || (baseUrl.endsWith('/dashboard') ? baseUrl.split('/').slice(0, -1).join('/') : baseUrl); | ||
|
|
||
| if (process.env.TEST_A11Y) { | ||
| testDirs = ['accessibility']; | ||
| } | ||
|
|
||
| /** | ||
| * LOGS: | ||
| * Summary of the environment variables that we have detected (or are going ot use) | ||
| * We won't show any passwords | ||
| */ | ||
| console.log('E2E Test Configuration'); | ||
| console.log(''); | ||
| console.log(` Username: ${ username }`); | ||
|
|
||
| if (!process.env.CATTLE_BOOTSTRAP_PASSWORD && !process.env.TEST_PASSWORD) { | ||
| console.log(' ❌ You must provide either CATTLE_BOOTSTRAP_PASSWORD or TEST_PASSWORD'); | ||
| } | ||
| if (process.env.CATTLE_BOOTSTRAP_PASSWORD && process.env.TEST_PASSWORD) { | ||
| console.log(' ❗ If both CATTLE_BOOTSTRAP_PASSWORD and TEST_PASSWORD are provided, the first will be used'); | ||
| } | ||
| if (!skipSetup && !process.env.CATTLE_BOOTSTRAP_PASSWORD) { | ||
| console.log(' ❌ You must provide CATTLE_BOOTSTRAP_PASSWORD when running setup tests'); | ||
| } | ||
| if (skipSetup && !process.env.TEST_PASSWORD) { | ||
| console.log(' ❌ You must provide TEST_PASSWORD when running the tests without the setup tests'); | ||
| } | ||
|
|
||
| console.log(` Setup tests will ${ skipSetup ? 'NOT' : '' } be run`); | ||
| console.log(` Dashboard URL: ${ baseUrl }`); | ||
| console.log(` Rancher API URL: ${ apiUrl }`); | ||
|
|
||
| // Check API - sometimes in dev, you might have API set to a different system to the base url - this won't work | ||
| // as the login cookie will be for the base url and any API requests will fail as not authenticated | ||
| if (apiUrl && !baseUrl.startsWith(apiUrl)) { | ||
| console.log('\n ❗ API variable is different to TEST_BASE_URL - tests may fail due to authentication issues'); | ||
| } | ||
|
|
||
| console.log(''); | ||
|
|
||
| /** | ||
| * CONFIGURATION | ||
| */ | ||
| export default defineConfig({ | ||
| projectId: process.env.TEST_PROJECT_ID, | ||
| defaultCommandTimeout: process.env.TEST_TIMEOUT ? +process.env.TEST_TIMEOUT : 10000, | ||
| trashAssetsBeforeRuns: true, | ||
| chromeWebSecurity: false, | ||
| retries: { | ||
| runMode: 2, | ||
| openMode: 0 | ||
| }, | ||
| env: { | ||
| grepFilterSpecs: true, | ||
| grepOmitFiltered: true, | ||
| baseUrl, | ||
| coverage: hasCoverage, | ||
| codeCoverage: { | ||
| exclude: [ | ||
| 'cypress/**/*.*', | ||
| '**/__tests__/**/*.*', | ||
| '**/__mocks__/**/*.*', | ||
| '**/shell/scripts/**/*.*', | ||
| 'docusaurus/**/*.*', | ||
| 'stories/**/*.*', | ||
| 'drone/**/*.*', | ||
| ], | ||
| include: [ | ||
| 'shell/**/*.{vue,ts,js}', | ||
| 'pkg/rancher-components/src/components/**/*.{vue,ts,js}', | ||
| ] | ||
| }, | ||
| api: apiUrl, | ||
| username, | ||
| password: process.env.CATTLE_BOOTSTRAP_PASSWORD || process.env.TEST_PASSWORD, | ||
| bootstrapPassword: process.env.CATTLE_BOOTSTRAP_PASSWORD, | ||
| grepTags: process.env.GREP_TAGS, | ||
| VAI_ENABLED: process.env.VAI_ENABLED, | ||
| // the below env vars are only available to tests that run in Jenkins | ||
| awsAccessKey: process.env.AWS_ACCESS_KEY_ID, | ||
| awsSecretKey: process.env.AWS_SECRET_ACCESS_KEY, | ||
| azureSubscriptionId: process.env.AZURE_AKS_SUBSCRIPTION_ID, | ||
| azureClientId: process.env.AZURE_CLIENT_ID, | ||
| azureClientSecret: process.env.AZURE_CLIENT_SECRET, | ||
| customNodeIp: process.env.CUSTOM_NODE_IP, | ||
| customNodeKey: process.env.CUSTOM_NODE_KEY, | ||
| accessibility: !!process.env.TEST_A11Y, // Are we running accessibility tests? | ||
| a11yFolder: path.join('.', 'cypress', 'accessibility'), | ||
| gkeServiceAccount: process.env.GKE_SERVICE_ACCOUNT, | ||
| }, | ||
| e2e: { | ||
| fixturesFolder: 'cypress/e2e/blueprints', | ||
| setupNodeEvents(on, config) { | ||
| // For more info: https://docs.cypress.io/guides/tooling/code-coverage | ||
| require('@cypress/code-coverage/task')(on, config); | ||
| require('@cypress/grep/src/plugin')(config); | ||
| // For more info: https://www.npmjs.com/package/cypress-delete-downloads-folder | ||
|
|
||
| on('task', { removeDirectory }); | ||
| websocketTasks(on, config); | ||
|
|
||
| require('cypress-terminal-report/src/installLogsPrinter')(on, { | ||
| outputRoot: `${ config.projectRoot }/browser-logs/`, | ||
| outputTarget: { 'out.html': 'html' }, | ||
| logToFilesOnAfterRun: true, | ||
| printLogsToConsole: 'never', | ||
| // printLogsToFile: 'always', // default prints on failures | ||
| }); | ||
|
|
||
| // Load Accessibility plugin if configured | ||
| // as per https://github.com/rancher/dashboard/pull/15865 load order matters | ||
| // this need to go after "cypress-terminal-report" always | ||
| if (process.env.TEST_A11Y) { | ||
| require('./cypress/support/plugins/accessibility').default(on, config); | ||
| } | ||
|
|
||
| return config; | ||
| }, | ||
| experimentalSessionAndOrigin: true, | ||
| specPattern: getSpecPattern(testDirs, process.env), | ||
| baseUrl | ||
| }, | ||
| videoCompression: 15, | ||
| videoUploadOnPasses: false, | ||
| }); | ||
| export default baseConfig; |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,18 @@ | ||
| # Ignore node_modules | ||
| node_modules/ | ||
|
|
||
| # Ignore build artifacts | ||
| *.log | ||
| *.tmp | ||
|
|
||
| # Ignore development files | ||
| .DS_Store | ||
| Thumbs.db | ||
|
|
||
| # Ignore any local config | ||
| .env | ||
| .env.local | ||
|
|
||
| # Ignore coverage reports | ||
| coverage/ | ||
| .nyc_output/ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think you miss
--access publichttps://yarnpkg.com/cli/npm/publish#details
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No, the flag is there:
https://github.com/torchiaf/dashboard/blob/9cb1ddb10e4ec608963de5524d589ce978b347df/cypress/scripts/publish.sh#L54