name: Dev concurrency: build on: push: branches: - 'master' - 'release/*' pull_request: branches: - 'master' - 'release/*' jobs: build_test: runs-on: ubuntu-latest steps: - name: Prepare - Checkout uses: actions/checkout@v4.2.2 - name: Prepare - Inject short Variables uses: rlespinasse/github-slug-action@v5.0.0 - name: Prepare - Setup QEMU uses: docker/setup-qemu-action@v3.6.0 - name: Prepare - Setup Docker Buildx uses: docker/setup-buildx-action@v3.10.0 - name: Prepare - Setup Node uses: actions/setup-node@v4.2.0 with: node-version: 18 - name: Build - BUILD uses: docker/build-push-action@v6.15.0 with: load: true cache-from: type=gha cache-to: type=gha,mode=max tags: squidex-local - name: Build - TestContainers uses: kohlerdominik/docker-run-action@v2.0.0 with: image: mcr.microsoft.com/dotnet/sdk:8.0 default_network: host volumes: ${{ github.workspace }}:/src run: dotnet test /src/backend/Squidex.sln --filter Category==TestContainers - name: Test - Start Compose run: docker compose up -d working-directory: tools/TestSuite - name: Test - RUN on Mongo uses: kohlerdominik/docker-run-action@v2.0.0 with: image: mcr.microsoft.com/dotnet/sdk:8.0 environment: | CONFIG__BACKUPURL=http://localhost:5000 CONFIG__WAIT=60 CONFIG__SERVER__URL=http://localhost:8080 WEBHOOKCATCHER__HOST__ENDPOINT=webhookcatcher default_network: host options: --name test1 volumes: ${{ github.workspace }}:/src run: dotnet test /src/tools/TestSuite/TestSuite.ApiTests/TestSuite.ApiTests.csproj --filter Category!=NotAutomated - name: Test - RUN on Postgres uses: kohlerdominik/docker-run-action@v2.0.0 with: image: mcr.microsoft.com/dotnet/sdk:8.0 environment: | CONFIG__BACKUPURL=http://localhost:5000 CONFIG__WAIT=60 CONFIG__SERVER__URL=http://localhost:8083 WEBHOOKCATCHER__HOST__ENDPOINT=webhookcatcher default_network: host options: --name test2 volumes: ${{ github.workspace }}:/src run: dotnet test /src/tools/TestSuite/TestSuite.ApiTests/TestSuite.ApiTests.csproj --filter "Category!=NotAutomated & Category!=MongoOnly" - name: Test - RUN on MySql uses: kohlerdominik/docker-run-action@v2.0.0 with: image: mcr.microsoft.com/dotnet/sdk:8.0 environment: | CONFIG__BACKUPURL=http://localhost:5000 CONFIG__WAIT=60 CONFIG__SERVER__URL=http://localhost:8084 WEBHOOKCATCHER__HOST__ENDPOINT=webhookcatcher default_network: host options: --name test3 volumes: ${{ github.workspace }}:/src run: dotnet test /src/tools/TestSuite/TestSuite.ApiTests/TestSuite.ApiTests.csproj --filter "Category!=NotAutomated & Category!=MongoOnly" - name: Test - RUN on SqlServer uses: kohlerdominik/docker-run-action@v2.0.0 with: image: mcr.microsoft.com/dotnet/sdk:8.0 environment: | CONFIG__BACKUPURL=http://localhost:5000 CONFIG__WAIT=60 CONFIG__SERVER__URL=http://localhost:8085 WEBHOOKCATCHER__HOST__ENDPOINT=webhookcatcher default_network: host options: --name test4 volumes: ${{ github.workspace }}:/src run: dotnet test /src/tools/TestSuite/TestSuite.ApiTests/TestSuite.ApiTests.csproj --filter "Category!=NotAutomated & Category!=MongoOnly" - name: Test - RUN on Mongo with path uses: kohlerdominik/docker-run-action@v2.0.0 with: image: mcr.microsoft.com/dotnet/sdk:8.0 environment: | CONFIG__BACKUPURL=http://localhost:5000 CONFIG__WAIT=60 CONFIG__SERVER__URL=http://localhost:8081/squidex WEBHOOKCATCHER__HOST__ENDPOINT=webhookcatcher default_network: host options: --name test5 volumes: ${{ github.workspace }}:/src run: dotnet test /src/tools/TestSuite/TestSuite.ApiTests/TestSuite.ApiTests.csproj --filter Category!=NotAutomated - name: Test - RUN on Mongo with dedicated collections uses: kohlerdominik/docker-run-action@v2.0.0 with: image: mcr.microsoft.com/dotnet/sdk:8.0 environment: | CONFIG__BACKUPURL=http://localhost:5000 CONFIG__WAIT=60 CONFIG__SERVER__URL=http://localhost:8082 WEBHOOKCATCHER__HOST__ENDPOINT=webhookcatcher default_network: host options: --name test6 volumes: ${{ github.workspace }}:/src run: dotnet test /src/tools/TestSuite/TestSuite.ApiTests/TestSuite.ApiTests.csproj --filter Category!=NotAutomated - name: Test - Install Playwright Dependencies run: npm ci working-directory: './tools/e2e' - name: Test - Install Playwright Browsers run: npx playwright install --with-deps working-directory: './tools/e2e' - name: Test - Run Playwright Tests run: npx playwright test --retries=3 working-directory: './tools/e2e' env: BASE__URL: http://localhost:8080 - name: Test - Upload Playwright Artifacts if: always() uses: actions/upload-artifact@v4.6.1 with: name: playwright-report path: tools/e2e/playwright-report/ retention-days: 30 - name: Test - Dump docker logs on failure if: failure() uses: jwalton/gh-docker-logs@v2.2.2 with: dest: './docker-logs' - name: Test - Upload docker logs if: failure() uses: actions/upload-artifact@v4.6.1 with: name: docker-logs path: './docker-logs' - name: Test - Cleanup if: always() run: docker compose down working-directory: tools/TestSuite - name: Publish - Remove unnecessary files run: | sudo rm -rf /usr/share/dotnet sudo rm -rf "$AGENT_TOOLSDIRECTORY" - name: Publish - Calculate Version if: github.event_name != 'pull_request' env: BUILD_NUMBER: ${{ github.run_number }} run: | echo "BUILD_NUMBER=$(($BUILD_NUMBER + 6000))" >> $GITHUB_ENV - name: Publish - Login to Docker Hub if: github.event_name != 'pull_request' uses: docker/login-action@v3.3.0 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - name: Publish - Build & Push for Multi-Platforms if: github.event_name != 'pull_request' uses: docker/build-push-action@v6.15.0 with: build-args: "SQUIDEX__RUNTIME__VERSION=7.0.0-dev-${{ env.BUILD_NUMBER }}" cache-from: type=gha cache-to: type=gha,mode=max platforms: linux/amd64,linux/arm64 tags: squidex/squidex:dev,squidex/squidex:dev-${{ env.BUILD_NUMBER }} push: true