Skip to content

feat: Make namespaces opt-in (#2786) #7994

feat: Make namespaces opt-in (#2786)

feat: Make namespaces opt-in (#2786) #7994

Workflow file for this run

name: Test
on:
push:
branches: [main, release]
pull_request:
jobs:
backend-build:
name: Build backend 🏗️
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-java@v3
with:
java-version: 21
distribution: adopt
- name: Setup node
uses: actions/setup-node@v3
with:
node-version: "22.x"
- name: Cache Gradle packages
uses: actions/cache@v3
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-wrapper-${{ hashFiles('gradle/wrapper/gradle-wrapper.properties') }}
- name: Compile kotlin
run: ./gradlew compileTestKotlin --parallel
- name: Build backend
run: ./gradlew bootJar --parallel
- name: Tar build assets
run: |
tar -czf ~/backend-api.tgz ./backend/api/build
tar -czf ~/backend-app.tgz ./backend/app/build
tar -czf ~/backend-data.tgz ./backend/data/build
tar -czf ~/backend-misc.tgz ./backend/misc/build
tar -czf ~/backend-security.tgz ./backend/security/build
tar -czf ~/backend-testing.tgz ./backend/testing/build
tar -czf ~/backend-development.tgz ./backend/development/build
tar -czf ~/ee-backend-app.tgz ./ee/backend/app/build
tar -czf ~/ee-backend-tests.tgz ./ee/backend/tests/build
- uses: actions/upload-artifact@v3
if: always()
with:
name: backend
path: |
~/backend-api.tgz
~/backend-app.tgz
~/backend-data.tgz
~/backend-misc.tgz
~/backend-security.tgz
~/backend-testing.tgz
~/backend-development.tgz
~/ee-backend-app.tgz
~/ee-backend-tests.tgz
backend-test:
name: BT ‍🔎
needs: [backend-build]
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
command:
[
"server-app:runContextRecreatingTests",
"server-app:runStandardTests",
"server-app:runWebsocketTests",
"server-app:runWithoutEeTests",
"ee-test:test",
"data:test",
"security:test",
]
steps:
- uses: actions/checkout@v3
- uses: actions/setup-java@v3
with:
java-version: 21
distribution: adopt
- name: Setup node
uses: actions/setup-node@v3
with:
node-version: "22.x"
- name: Cache Gradle packages
uses: actions/cache@v3
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-wrapper-${{ hashFiles('gradle/wrapper/gradle-wrapper.properties') }}
- name: Download backend build result
uses: actions/download-artifact@v3
with:
name: backend
path: ~/
- name: Un-tar build results
run: |
tar -xzf ~/backend-api.tgz ./backend/api/build
tar -xzf ~/backend-app.tgz ./backend/app/build
tar -xzf ~/backend-data.tgz ./backend/data/build
tar -xzf ~/backend-misc.tgz ./backend/misc/build
tar -xzf ~/backend-security.tgz ./backend/security/build
tar -xzf ~/backend-testing.tgz ./backend/testing/build
tar -xzf ~/backend-development.tgz ./backend/development/build
tar -xzf ~/ee-backend-app.tgz ./ee/backend/app/build
tar -xzf ~/ee-backend-tests.tgz ./ee/backend/tests/build
- name: Remove ee
if: matrix.command == 'server-app:runWithoutEeTests'
run: |
rm -rf ./ee
- name: Run backend tests
uses: nick-fields/retry@v2
with:
timeout_minutes: 30
max_attempts: ${{ github.event_name == 'push' && 5 || 1 }}
# Print free memory for debugging purposes
command: ./gradlew ${{ matrix.command }}
env:
SKIP_SERVER_BUILD: true
CI_RELEASE: ${{ github.event_name == 'push' && true || false }}
- name: Get report name
id: reportName
if: always()
run: |
reportName=${{ matrix.command }}
echo "reportName=${reportName//\:/_}" >> $GITHUB_OUTPUT
- uses: actions/upload-artifact@v3
if: always()
with:
name: backend_test_reports_${{ steps.reportName.outputs.reportName }}
path: |
./**/build/reports/**/*
- name: Test Report
uses: dorny/test-reporter@v1
if: ${{ always() && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) }}
with:
name: Test report for ${{ matrix.command }}
path: "**/build/test-results/**/TEST-*.xml"
reporter: java-junit
e2e:
needs: [frontend-build, backend-build, e2e-install-deps]
runs-on: ubuntu-latest
name: E2E testing ‍🔎
strategy:
fail-fast: false
matrix:
total_jobs: [15]
job_index: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
steps:
- uses: actions/checkout@v3
- uses: actions/setup-java@v3
with:
java-version: 21
distribution: adopt
- name: Setup node
uses: actions/setup-node@v3
with:
node-version: "22.x"
- name: Cache Gradle packages
uses: actions/cache@v3
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-wrapper-${{ hashFiles('gradle/wrapper/gradle-wrapper.properties') }}
- name: Cache node modules
uses: actions/cache@v3
with:
path: ~/.npm
key: cache-node-modules-${{ runner.os }}-${{ hashFiles('**/package-lock.json') }}
- name: Download backend build result
uses: actions/download-artifact@v3
with:
name: backend
path: ~/
- name: Un-tar build results
run: |
tar -xzf ~/backend-api.tgz ./backend/api/build
tar -xzf ~/backend-app.tgz ./backend/app/build
tar -xzf ~/backend-data.tgz ./backend/data/build
tar -xzf ~/backend-misc.tgz ./backend/misc/build
tar -xzf ~/backend-security.tgz ./backend/security/build
tar -xzf ~/backend-testing.tgz ./backend/testing/build
tar -xzf ~/backend-development.tgz ./backend/development/build
tar -xzf ~/ee-backend-app.tgz ./ee/backend/app/build
tar -xzf ~/ee-backend-tests.tgz ./ee/backend/tests/build
- name: Download frontend build result
uses: actions/download-artifact@v3
with:
name: webapp
path: ./webapp/dist
- name: Download dependencies
uses: actions/download-artifact@v3
with:
name: e2e_deps
path: ~/
- name: Untar node modules
run: |
tar -xzf ~/node_modules.tgz ./e2e/node_modules
- name: Create cache directory
run: |
mkdir -p ~/.cache
- name: Untar Cypress cache
run: |
tar -xzf ~/cypress_cache.tgz
working-directory: /home/runner/.cache/
- name: Run e2e test
uses: nick-fields/retry@v2
with:
timeout_minutes: 30
max_attempts: ${{ github.event_name == 'push' && 5 || 1 }}
command: |
./gradlew runE2e -x bootJar -x buildWebapp
env:
TOLGEE_API_KEY: ${{secrets.TOLGEE_API_KEY}}
TOLGEE_API_URL: ${{secrets.TOLGEE_API_URL}}
SKIP_WEBAPP_BUILD: true
SKIP_SERVER_BUILD: true
SKIP_INSTALL_E2E_DEPS: true
E2E_TOTAL_JOBS: ${{matrix.total_jobs}}
E2E_JOB_INDEX: ${{matrix.job_index}}
CI_RELEASE: ${{ github.event_name == 'push' && true || false }}
- uses: actions/upload-artifact@v3
if: failure()
with:
name: e2e
path: |
./e2e/cypress/videos/**/*
./e2e/cypress/screenshots/**/*
./e2e/server
- uses: actions/upload-artifact@v3
if: failure()
with:
name: e2e_server_log_${{ matrix.job_index }}
path: |
./e2e/server.log
frontend-build:
name: Build frontend 🏗️
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-java@v3
with:
java-version: 21
distribution: adopt
- name: Cache Gradle packages
uses: actions/cache@v3
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-wrapper-${{ hashFiles('gradle/wrapper/gradle-wrapper.properties') }}
- name: Setup node
uses: actions/setup-node@v3
with:
node-version: "22.x"
- name: Cache node modules
uses: actions/cache@v3
with:
path: ~/.npm
key: cache-node-modules-${{ runner.os }}-${{ hashFiles('**/package-lock.json') }}
- name: Build webapp
run: ./gradlew buildWebapp
env:
TOLGEE_API_KEY: ${{secrets.TOLGEE_API_KEY}}
TOLGEE_API_URL: ${{secrets.TOLGEE_API_URL}}
- name: Upload built webapp
uses: actions/upload-artifact@v3
with:
name: webapp
path: webapp/dist
frontend-code-check:
name: Frontend static check 🪲
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Install dependencies
run: npm ci
working-directory: ./webapp
- name: Cache node modules
uses: actions/cache@v3
with:
path: ~/.npm
key: cache-node-modules-${{ runner.os }}-${{ hashFiles('**/package-lock.json') }}
- name: Typescript
run: npm run tsc
working-directory: ./webapp
- name: Eslint
run: npm run eslint
working-directory: ./webapp
- name: Keys extraction check
run: npm run check-translations
working-directory: ./webapp
- name: Load newest translations
run: npm run load-translations
working-directory: ./webapp
if: ${{ env.TOLGEE_API_KEY != '' }}
env:
TOLGEE_API_KEY: ${{secrets.TOLGEE_API_KEY}}
- name: Check missing translation keys
run: npm run tsc:prod
working-directory: ./webapp
if: ${{ env.TOLGEE_API_KEY != '' }}
env:
TOLGEE_API_KEY: ${{secrets.TOLGEE_API_KEY}}
- name: Check it builds without ee directory
run: |
rm -rf ./src/ee
npm install
npm run tsc
npm run build
working-directory: ./webapp
e2e-code-checks:
name: E2E Static Check 🪲
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup node
uses: actions/setup-node@v3
with:
node-version: "22.x"
- name: Cache node modules
uses: actions/cache@v3
with:
path: ~/.npm
key: cache-node-modules-${{ runner.os }}-${{ hashFiles('**/package-lock.json') }}
- name: Install dependencies
run: npm ci
working-directory: ./e2e
- name: Eslint
run: npm run eslint
working-directory: ./e2e
- name: Typecheck
run: npm run tsc
working-directory: ./e2e
e2e-install-deps:
name: Install E2E dependencies ⬇️
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup node
uses: actions/setup-node@v3
with:
node-version: "22.x"
- name: Cache node modules
uses: actions/cache@v3
with:
path: ~/.npm
key: cache-node-modules-${{ runner.os }}-${{ hashFiles('**/package-lock.json') }}
- name: Install dependencies
run: npm ci
working-directory: ./e2e
- name: Tar node modules
run: |
tar -czf ~/node_modules.tgz ./e2e/node_modules
- name: Tar Cypress cache
run: |
tar -czf ~/cypress_cache.tgz ./Cypress
working-directory: /home/runner/.cache/
- uses: actions/upload-artifact@v3
if: always()
with:
name: e2e_deps
path: |
~/node_modules.tgz
~/cypress_cache.tgz
backend-code-checks:
name: Ktlint 🪲
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-java@v3
with:
java-version: 21
distribution: adopt
- name: Setup node
uses: actions/setup-node@v3
with:
node-version: "22.x"
- name: Cache Gradle packages
uses: actions/cache@v3
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-wrapper-${{ hashFiles('gradle/wrapper/gradle-wrapper.properties') }}
- name: Run ktlint
run: ./gradlew ktlintCheck
everything-passed:
name: Everything passed 🎉
needs:
- backend-build
- backend-test
- backend-code-checks
- frontend-build
- frontend-code-check
- e2e
- e2e-code-checks
- e2e-install-deps
runs-on: ubuntu-latest
if: always()
steps:
- run: |
# Check the results of all jobs
failed_jobs=()
if [[ "${{ needs.backend-build.result }}" != "success" ]]; then
failed_jobs+=("backend-build")
fi
if [[ "${{ needs.backend-test.result }}" != "success" ]]; then
failed_jobs+=("backend-test")
fi
if [[ "${{ needs.backend-code-checks.result }}" != "success" ]]; then
failed_jobs+=("backend-code-checks")
fi
if [[ "${{ needs.frontend-build.result }}" != "success" ]]; then
failed_jobs+=("frontend-build")
fi
if [[ "${{ needs.frontend-code-check.result }}" != "success" ]]; then
failed_jobs+=("frontend-code-check")
fi
if [[ "${{ needs.e2e.result }}" != "success" ]]; then
failed_jobs+=("e2e")
fi
if [[ "${{ needs.e2e-code-checks.result }}" != "success" ]]; then
failed_jobs+=("e2e-code-checks")
fi
if [[ "${{ needs.e2e-install-deps.result }}" != "success" ]]; then
failed_jobs+=("e2e-install-deps")
fi
if [[ "${#failed_jobs[@]}" -gt 0 ]]; then
echo "The following jobs failed: ${failed_jobs[*]}"
exit 1
fi
echo "Everything passed 🎉"