E2E without workflows #23
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: E2E without workflows | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
on: | |
workflow_run: | |
workflows: [Nocobase Build Test] | |
types: [completed] | |
jobs: | |
e2e-test-postgres: | |
runs-on: ubuntu-latest | |
container: node:18 | |
services: | |
# Label used to access the service container | |
postgres: | |
# Docker Hub image | |
image: postgres:11 | |
# Provide the password for postgres | |
env: | |
POSTGRES_USER: nocobase | |
POSTGRES_PASSWORD: password | |
# Set health checks to wait until postgres has started | |
options: >- | |
--health-cmd pg_isready | |
--health-interval 10s | |
--health-timeout 5s | |
--health-retries 5 | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Checkout pro-plugins | |
continue-on-error: true # 外部开发者提交 PR 的时候因为没有权限这里会报错,为了能够继续执行后续步骤,所以这里设置为 continue-on-error: true | |
uses: actions/checkout@v4 | |
with: | |
repository: nocobase/pro-plugins | |
ref: main | |
path: packages/pro-plugins | |
ssh-key: ${{ secrets.SUBMODULE_SSH_KEY }} | |
- name: Set variables | |
continue-on-error: true # 外部开发者提交 PR 的时候因为没有权限这里会报错,为了能够继续执行后续步骤,所以这里设置为 continue-on-error: true | |
run: | | |
APPEND_PRESET_LOCAL_PLUGINS=$(find ./packages/pro-plugins/@nocobase -mindepth 1 -maxdepth 1 -type d -exec basename {} \; | sed 's/^plugin-//' | tr '\n' ',' | sed 's/,$//') | |
echo "var2=$APPEND_PRESET_LOCAL_PLUGINS" >> $GITHUB_OUTPUT | |
id: vars | |
- name: Get yarn cache directory path | |
id: yarn-cache-dir-path | |
run: echo "::set-output name=dir::$(yarn cache dir)" | |
- uses: actions/cache@v4 | |
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`) | |
with: | |
path: ${{ steps.yarn-cache-dir-path.outputs.dir }} | |
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} | |
restore-keys: | | |
${{ runner.os }}-yarn- | |
- run: yarn --frozen-lockfile | |
- name: Download build artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: build-artifact | |
- run: npx playwright install chromium --with-deps | |
- name: Test with postgres | |
run: yarn e2e p-test --ignore 'packages/**/{plugin-workflow,plugin-workflow-*}/**/__e2e__/**/*.test.ts' | |
env: | |
__E2E__: true | |
APP_ENV: production | |
LOGGER_LEVEL: error | |
DB_DIALECT: postgres | |
DB_HOST: postgres | |
DB_PORT: 5432 | |
DB_USER: nocobase | |
DB_PASSWORD: password | |
DB_DATABASE: nocobase | |
APPEND_PRESET_LOCAL_PLUGINS: ${{ steps.vars.outputs.var2 }} | |
- name: Merge reports | |
run: | | |
node scripts/moveE2EReportFiles.js && npx playwright merge-reports --config .github/workflows/merge.config.ts ./storage/playwright/tests-report-blob | |
env: | |
NODE_OPTIONS: --max-old-space-size=4096 | |
- name: Upload e2e-report | |
uses: actions/upload-artifact@v4 | |
id: artifact-upload-step | |
with: | |
name: e2e-report | |
path: ./e2e-report/index.html | |
- name: Comment on PR | |
uses: actions/github-script@v6 | |
with: | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
script: | | |
const jobName = 'E2E without workflows'; | |
const fs = require('fs'); | |
const prNumber = '${{ github.event.workflow_run.pull_requests.number }}'; | |
if (!prNumber) { | |
core.error('No pull request found for commit ' + context.sha + ' and workflow triggered by: ' + jobName); | |
return; | |
} | |
{ | |
// Mark previous comments as outdated by minimizing them. | |
const { data: comments } = await github.rest.issues.listComments({ | |
...context.repo, | |
issue_number: prNumber, | |
}); | |
for (const comment of comments) { | |
if (comment.user.login === 'github-actions[bot]' && comment.body.includes(jobName)) { | |
await github.graphql(` | |
mutation { | |
minimizeComment(input: {subjectId: "${comment.node_id}", classifier: OUTDATED}) { | |
clientMutationId | |
} | |
} | |
`); | |
} | |
} | |
} | |
const reportUrl = '${{ steps.artifact-upload-step.outputs.artifact-url }}'; | |
core.notice('Report url: ' + reportUrl); | |
const mergeWorkflowUrl = `${context.serverUrl}/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}`; | |
const reportMd = await fs.promises.readFile('report.md', 'utf8'); | |
function formatComment(lines) { | |
let body = lines.join('\n'); | |
if (body.length > 65535) | |
body = body.substring(0, 65000) + `... ${body.length - 65000} more characters`; | |
return body; | |
} | |
const { data: response } = await github.rest.issues.createComment({ | |
...context.repo, | |
issue_number: prNumber, | |
body: formatComment([ | |
`### Test results for "${jobName}"`, | |
reportMd, | |
'', | |
`Full [HTML report](${reportUrl}). Merge [workflow run](${mergeWorkflowUrl}).` | |
]), | |
}); | |
core.info('Posted comment: ' + response.html_url); | |
timeout-minutes: 180 |