diff --git a/.github/workflows/.keep b/.github/workflows/.keep deleted file mode 100644 index e69de29..0000000 diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml new file mode 100644 index 0000000..a65ef2a --- /dev/null +++ b/.github/workflows/ci.yaml @@ -0,0 +1,90 @@ +name: CI + +on: + push: + branches: + - master + - main + pull_request: + branches: + - master + - main + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Setup Node.js environment + uses: actions/setup-node@v3 + with: + node-version: '20' + cache: 'yarn' + + - name: Install dependencies + run: yarn install --immutable --prefer-offline + + - name: Check types + run: yarn run typecheck + - name: Lint + run: yarn run lint + - name: Unit tests + run: yarn run test:ci + - name: Build frontend + run: yarn run build + + - name: Check for backend + id: check-for-backend + run: | + if [ -f "Magefile.go" ] + then + echo "has-backend=true" >> $GITHUB_OUTPUT + fi + + - name: Setup Go environment + if: steps.check-for-backend.outputs.has-backend == 'true' + uses: actions/setup-go@v3 + with: + go-version: '1.21' + + - name: Test backend + if: steps.check-for-backend.outputs.has-backend == 'true' + uses: magefile/mage-action@v2 + with: + version: latest + args: coverage + + - name: Build backend + if: steps.check-for-backend.outputs.has-backend == 'true' + uses: magefile/mage-action@v2 + with: + version: latest + args: buildAll + + - name: Check for E2E + id: check-for-e2e + run: | + if [ -d "cypress" ] + then + echo "has-e2e=true" >> $GITHUB_OUTPUT + fi + + - name: Start grafana docker + if: steps.check-for-e2e.outputs.has-e2e == 'true' + run: docker-compose up -d + + - name: Run e2e tests + if: steps.check-for-e2e.outputs.has-e2e == 'true' + run: yarn run e2e + + - name: Stop grafana docker + if: steps.check-for-e2e.outputs.has-e2e == 'true' + run: docker-compose down + + - name: Archive E2E output + uses: actions/upload-artifact@v3 + if: steps.check-for-e2e.outputs.has-e2e == 'true' && steps.run-e2e-tests.outcome != 'success' + with: + name: cypress-videos + path: cypress/videos + retention-days: 5 diff --git a/.github/workflows/is-compatible.yml b/.github/workflows/is-compatible.yml new file mode 100644 index 0000000..6a2438f --- /dev/null +++ b/.github/workflows/is-compatible.yml @@ -0,0 +1,19 @@ +name: Latest Grafana API compatibility check +on: [pull_request] + +jobs: + compatibilitycheck: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Setup Node.js environment + uses: actions/setup-node@v3 + with: + node-version: '20' + cache: 'yarn' + - name: Install dependencies + run: yarn install --immutable --prefer-offline + - name: Build plugin + run: yarn run build + - name: Compatibility check + run: npx @grafana/levitate@latest is-compatible --path src/module.ts --target @grafana/data,@grafana/ui,@grafana/runtime diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml new file mode 100644 index 0000000..3bd1292 --- /dev/null +++ b/.github/workflows/release.yaml @@ -0,0 +1,20 @@ +name: Release + +on: + push: + tags: + - 'v*' # Run workflow on version tags, e.g. v1.0.0. + +jobs: + release: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: grafana/plugin-actions/build-plugin@release + # uncomment to enable plugin sign in + #with: + # see https://grafana.com/developers/plugin-tools/publish-a-plugin/sign-a-plugin#generate-an-access-policy-token to generate it + # save the value in your repository secrets + #policy_token: $ + #usage of GRAFANA_API_KEY is deprecated prefer policy_token + #grafana_token: $