diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a862afd..367010b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,19 +1,22 @@ name: CI -on: [push] +on: [ push ] permissions: read-all jobs: build: + name: Build, lint and unit tests runs-on: ubuntu-latest + outputs: + plugin-id: ${{ steps.metadata.outputs.plugin-id }} + plugin-version: ${{ steps.metadata.outputs.plugin-version }} + has-e2e: ${{ steps.check-for-e2e.outputs.has-e2e }} + has-backend: ${{ steps.check-for-backend.outputs.has-backend }} env: GRAFANA_ACCESS_POLICY_TOKEN: ${{ secrets.GRAFANA_ACCESS_POLICY_TOKEN }} steps: - uses: actions/checkout@v4 - with: - ref: ${{ github.ref }} - - name: Setup Node.js environment uses: actions/setup-node@v4 with: @@ -60,6 +63,14 @@ jobs: version: latest args: buildAll + - name: Check for E2E + id: check-for-e2e + run: | + if [ -f "playwright.config.ts" ] + then + echo "has-e2e=true" >> $GITHUB_OUTPUT + fi + - name: Sign plugin run: yarn run sign if: ${{ env.GRAFANA_ACCESS_POLICY_TOKEN != '' }} @@ -89,3 +100,96 @@ jobs: name: ${{ steps.metadata.outputs.plugin-id }}-${{ steps.metadata.outputs.plugin-version }} path: ${{ steps.metadata.outputs.plugin-id }} retention-days: 5 + + resolve-versions: + name: Resolve e2e images + runs-on: ubuntu-latest + timeout-minutes: 3 + needs: build + if: ${{ needs.build.outputs.has-e2e == 'true' }} + outputs: + matrix: ${{ steps.resolve-versions.outputs.matrix }} + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Resolve Grafana E2E versions + id: resolve-versions + uses: grafana/plugin-actions/e2e-version@main + + playwright-tests: + needs: [ resolve-versions, build ] + timeout-minutes: 15 + strategy: + fail-fast: false + matrix: + GRAFANA_IMAGE: ${{fromJson(needs.resolve-versions.outputs.matrix)}} + name: e2e test ${{ matrix.GRAFANA_IMAGE.name }}@${{ matrix.GRAFANA_IMAGE.VERSION }} + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Download plugin + uses: actions/download-artifact@v4 + with: + path: dist + name: ${{ needs.build.outputs.plugin-id }}-${{ needs.build.outputs.plugin-version }} + + - name: Execute permissions on binary + if: needs.build.outputs.has-backend == 'true' + run: | + chmod +x ./dist/gpx_* + + - name: Setup Node.js environment + uses: actions/setup-node@v4 + with: + node-version: '20' + cache: 'yarn' + + - name: Install dev dependencies + run: yarn install --immutable --prefer-offline + + - name: Start Grafana + run: | + docker-compose pull + DEVELOPMENT=false GRAFANA_VERSION=${{ matrix.GRAFANA_IMAGE.VERSION }} GRAFANA_IMAGE=${{ matrix.GRAFANA_IMAGE.NAME }} docker-compose up -d + + - name: Wait for Grafana to start + uses: nev7n/wait_for_response@v1 + with: + url: 'http://localhost:3000/' + responseCode: 200 + timeout: 60000 + interval: 500 + + - name: Install Playwright Browsers + run: yarn exec playwright install chromium --with-deps + + - name: Run Playwright tests + id: run-tests + run: yarn run e2e + + - name: Docker logs + if: ${{ always() && steps.run-tests.outcome == 'failure' }} + run: | + docker logs test-test-datasource >& grafana-server.log + + - name: Stop grafana docker + run: docker-compose down + + - name: Upload server log + uses: actions/upload-artifact@v4 + if: ${{ always() && steps.run-tests.outcome == 'failure' }} + with: + name: ${{ matrix.GRAFANA_IMAGE.NAME }}-v${{ matrix.GRAFANA_IMAGE.VERSION }}-${{github.run_id}}-server-log + path: grafana-server.log + retention-days: 5 + + # Uncomment this step to upload the Playwright report to Github artifacts. + # If your repository is public, the report will be public on the Internet so beware not to expose sensitive information. + # - name: Upload artifacts + # uses: actions/upload-artifact@v4 + # if: ${{ always() && steps.run-tests.outcome == 'failure' }} + # with: + # name: playwright-report-${{ matrix.GRAFANA_IMAGE.NAME }}-v${{ matrix.GRAFANA_IMAGE.VERSION }}-${{github.run_id}} + # path: playwright-report/ + # retention-days: 5 diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml deleted file mode 100644 index 75b45c3..0000000 --- a/.github/workflows/e2e.yml +++ /dev/null @@ -1,74 +0,0 @@ -name: E2E tests -on: - pull_request: - -permissions: - contents: read - id-token: write - -jobs: - resolve-versions: - name: Resolve Grafana images - runs-on: ubuntu-latest - timeout-minutes: 3 - outputs: - matrix: ${{ steps.resolve-versions.outputs.matrix }} - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Resolve Grafana E2E versions - id: resolve-versions - uses: grafana/plugin-actions/e2e-version@main - - playwright-tests: - needs: resolve-versions - timeout-minutes: 60 - strategy: - fail-fast: false - matrix: - GRAFANA_IMAGE: ${{fromJson(needs.resolve-versions.outputs.matrix)}} - name: e2e ${{ matrix.GRAFANA_IMAGE.name }}@${{ matrix.GRAFANA_IMAGE.VERSION }} - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - - name: Setup Node.js environment - uses: actions/setup-node@v4 - with: - node-version-file: .nvmrc - - - name: Install yarn dependencies - run: yarn install - - - name: Build frontend - run: yarn build - - - name: Install Playwright Browsers - run: yarn playwright install --with-deps - - - name: Start Grafana - run: | - docker-compose pull - GRAFANA_VERSION=${{ matrix.GRAFANA_IMAGE.VERSION }} GRAFANA_IMAGE=${{ matrix.GRAFANA_IMAGE.NAME }} docker-compose up -d - - - name: Wait for Grafana to start - uses: nev7n/wait_for_response@v1 - with: - url: 'http://localhost:3000/' - responseCode: 200 - timeout: 60000 - interval: 500 - - - name: Run Playwright tests - id: run-tests - run: yarn playwright test - - # Uncomment this step to upload the Playwright report to Github artifacts. - # If your repository is public, the report will be public on the Internet so beware not to expose sensitive information. - # - name: Upload artifacts - # uses: actions/upload-artifact@v4 - # if: ${{ (always() && steps.run-tests.outcome == 'success') || (failure() && steps.run-tests.outcome == 'failure') }} - # with: - # name: playwright-report-${{ matrix.GRAFANA_IMAGE.NAME }}-v${{ matrix.GRAFANA_IMAGE.VERSION }}-${{github.run_id}} - # path: playwright-report/ - # retention-days: 30