diff --git a/.github/actions/site-reset/action.yml b/.github/actions/site-reset/action.yml new file mode 100644 index 0000000000..f24a9dc8bf --- /dev/null +++ b/.github/actions/site-reset/action.yml @@ -0,0 +1,24 @@ +--- +name: Re-setting site, for CI Tests +description: Setup Docker with caching and Buildx + +inputs: + token: + description: A GitHub token + required: true + +runs: + using: "composite" + steps: + - uses: actions/checkout@v4 + with: + # Our Taskfile requires a proper checkout to function because of + # certain vars. + fetch-depth: 0 + - name: Install go-task + uses: arduino/setup-task@v2 + with: + repo-token: ${{ inputs.token }} + - name: Setup site + shell: bash + run: task ci:reset diff --git a/.github/workflows/ci-site-tests.yml b/.github/workflows/ci-site-tests.yml new file mode 100644 index 0000000000..a1439be7df --- /dev/null +++ b/.github/workflows/ci-site-tests.yml @@ -0,0 +1,98 @@ +--- +name: CI site tests +on: pull_request + +jobs: + LightHouse: + name: Test site performance using Lighthouse + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Re-setting site + uses: ./.github/actions/site-reset + with: + token: ${{ secrets.GITHUB_TOKEN }} + - name: Run Lighthouse test + run: task ci:lighthouse + - name: Archive logs + uses: actions/upload-artifact@v4 + if: ${{ always() }} + with: + name: lighthouse-results + path: .lighthouseci + + Pa11y: + name: Test accessibility using Pa11y + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Re-setting site + uses: ./.github/actions/site-reset + with: + token: ${{ secrets.GITHUB_TOKEN }} + - name: Run Pa11y + run: task ci:pa11y + - name: Archive screenshots + if: ${{ always() }} + uses: actions/upload-artifact@v4 + with: + name: pa11y-screenshots + path: pa11y/screenshots + + Cypress: + name: Run Cypress functional tests + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Re-setting site + uses: ./.github/actions/site-reset + with: + token: ${{ secrets.GITHUB_TOKEN }} + - name: Run Cypress + run: task ci:cypress + - name: Archive videoes + if: ${{ always() }} + uses: actions/upload-artifact@v4 + with: + name: cypress-videos + path: cypress/videos + - name: Archive screenshots + if: ${{ always() }} + uses: actions/upload-artifact@v4 + with: + name: cypress-screenshots + path: cypress/screenshots + + CheckOpenApiSpec: + name: Check OpenAPI specification + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Re-setting site + uses: ./.github/actions/site-reset + with: + token: ${{ secrets.GITHUB_TOKEN }} + - name: Validate specification + run: task ci:openapi:validate + - name: Download current specification + run: task ci:openapi:download + - name: Ensure specification has not drifted + run: git diff --ignore-space-at-eol --exit-code openapi.json + - name: Generate package for CMS API specification + run: task dev:codegen:dpl-cms + - name: Ensure CMS API package code has not drifted + run: git diff --ignore-space-at-eol --exit-code packages/cms-api/* + + CheckDrupalConfig: + name: Check Drupal Config + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Re-setting site + uses: ./.github/actions/site-reset + with: + token: ${{ secrets.GITHUB_TOKEN }} + - name: Export configuration + run: task dev:cli -- drush config-export -y + - name: Check for uncommited configuration after install + run: git diff --ignore-space-at-eol --exit-code config/sync/*.yml diff --git a/.github/workflows/ci-tests.yml b/.github/workflows/ci-tests.yml index 0ce56d467c..f016a59c76 100644 --- a/.github/workflows/ci-tests.yml +++ b/.github/workflows/ci-tests.yml @@ -102,83 +102,6 @@ jobs: - name: Run PhpUnit run: ./vendor/bin/phpunit --coverage-text - LightHouse: - name: Test site performance using Lighthouse - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - # Our Taskfile requires a proper checkout to function because of - # certain vars. - fetch-depth: 0 - - name: Install go-task - uses: arduino/setup-task@v2 - with: - repo-token: ${{ secrets.GITHUB_TOKEN }} - - name: Setup site - run: task ci:reset - - name: Run Lighthouse test - run: task ci:lighthouse - - name: Archive logs - uses: actions/upload-artifact@v4 - with: - name: lighthouse-results - path: .lighthouseci - - Pa11y: - name: Test accessibility using Pa11y - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - # Our Taskfile requires a proper checkout to function because of - # certain vars. - fetch-depth: 0 - - name: Install go-task - uses: arduino/setup-task@v2 - with: - repo-token: ${{ secrets.GITHUB_TOKEN }} - - name: Setup site - run: task ci:reset - - name: Run Pa11y - run: task ci:pa11y - - name: Archive screenshots - if: ${{ always() }} - uses: actions/upload-artifact@v4 - with: - name: pa11y-screenshots - path: pa11y/screenshots - - Cypress: - name: Run Cypress functional tests - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - # Our Taskfile requires a proper checkout to function because of - # certain vars. - fetch-depth: 0 - - name: Install go-task - uses: arduino/setup-task@v2 - with: - repo-token: ${{ secrets.GITHUB_TOKEN }} - - name: Setup site - run: task ci:reset - - name: Run Cypress - run: task ci:cypress - - name: Archive videoes - if: always() - uses: actions/upload-artifact@v4 - with: - name: cypress-videos - path: cypress/videos - - name: Archive screenshots - if: always() - uses: actions/upload-artifact@v4 - with: - name: cypress-screenshots - path: cypress/screenshots - MarkdownLint: name: Lint Markdown runs-on: ubuntu-latest @@ -256,52 +179,6 @@ jobs: - name: Run ESLint run: npx eslint cypress -c cypress/.eslintrc.json - CheckOpenApiSpec: - name: Check OpenAPI specification - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - # Our Taskfile requires a proper checkout to function because of - # certain vars. - fetch-depth: 0 - - name: Install go-task - uses: arduino/setup-task@v2 - with: - repo-token: ${{ secrets.GITHUB_TOKEN }} - - name: Setup site - run: task ci:reset - - name: Validate specification - run: task ci:openapi:validate - - name: Download current specification - run: task ci:openapi:download - - name: Ensure specification has not drifted - run: git diff --ignore-space-at-eol --exit-code openapi.json - - name: Generate package for CMS API specification - run: task dev:codegen:dpl-cms - - name: Ensure CMS API package code has not drifted - run: git diff --ignore-space-at-eol --exit-code packages/cms-api/* - - CheckDrupalConfig: - name: Check Drupal Config - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - # Our Taskfile requires a proper checkout to function because of - # certain vars. - fetch-depth: 0 - - name: Install go-task - uses: arduino/setup-task@v2 - with: - repo-token: ${{ secrets.GITHUB_TOKEN }} - - name: Setup site - run: task ci:reset - - name: Export configuration - run: task dev:cli -- drush config-export -y - - name: Check for uncommited configuration after install - run: git diff --ignore-space-at-eol --exit-code config/sync/*.yml - CheckPhpVersion: name: Check PHP version runs-on: ubuntu-latest diff --git a/Taskfile.yml b/Taskfile.yml index 6a21a7717f..c8276572f5 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -125,8 +125,8 @@ tasks: cmds: - docker compose {{ .DOCKER_COMPOSE_FILES }} pull - dev:reset: - desc: Create local development setup in a clean state + dev:reset:common: + desc: Preparing the environments for resetting the setup. deps: # Build new containers if necessary. - dev:build @@ -149,22 +149,16 @@ tasks: - task dev:pull # Start local environment. - task dev:start + + dev:reset: + desc: Create local development setup in a clean state + cmds: + - task dev:reset:before # Install site. - task dev:cli -- drush site-install --existing-config -y # Practice shows that the cache needs to be cleared to avoid configuration # errors even after a site install. - task dev:cache:clear:drupal - # Import translations. - - | - if [ -n "${SKIP_LANGUAGE_IMPORT}" ]; then - echo "Skipping language import due to SKIP_LANGUAGE_IMPORT environment variable" - else - task dev:cli -- drush locale-check - task dev:cli -- drush locale-update - task dev:cli -- drush dpl_po:import-remote-config-po da https://danskernesdigitalebibliotek.github.io/dpl-cms/translations/da.config.po - fi - # Clear all caches to ensure we have a pristine setup. - - task dev:cache:clear:all # Run deploy hooks. - task dev:cli -- drush deploy -y # Ensure site is reachable and warm any caches @@ -174,6 +168,16 @@ tasks: - task dev:create-users # Show a one-time login to the local site. - task dev:cli -- drush user-login + # Import translations. + - | + if [ -n "${SKIP_LANGUAGE_IMPORT}" ]; then + echo "Skipping language import due to SKIP_LANGUAGE_IMPORT environment variable" + else + task dev:cli -- drush locale-check + task dev:cli -- drush locale-update + task dev:cli -- drush dpl_po:import-remote-config-po da https://danskernesdigitalebibliotek.github.io/dpl-cms/translations/da.config.po + task dev:import-profile-translations + fi dev:openid:configure: desc: Set openid connect settings based on .env variables. And run cron. @@ -382,7 +386,9 @@ tasks: ci:reset: desc: Create CI setup in a clean state cmds: - - task dev:reset + - task dev:reset:common + - task dev:cli -- drush sqlq --file=../tools/site-reset.sql.gz + - task dev:cli -- drush deploy env: DOCKER_COMPOSE_FILES: "{{ .DOCKER_COMPOSE_FILES_CI }}" SKIP_LANGUAGE_IMPORT: "true" diff --git a/tools/site-reset.sql.gz b/tools/site-reset.sql.gz new file mode 100644 index 0000000000..e0a1be66ef Binary files /dev/null and b/tools/site-reset.sql.gz differ