diff --git a/.github/workflows/e2e-automation.yml b/.github/workflows/e2e-automation.yml new file mode 100644 index 000000000..6303001a3 --- /dev/null +++ b/.github/workflows/e2e-automation.yml @@ -0,0 +1,92 @@ +name: "E2E: Automation suite" +on: + workflow_dispatch: + inputs: + test_suite: + description: 'Select test suite to run' + default: 'regression' + required: true + type: choice + options: + - regression + - sanity + - smoke + qase_token: + description: 'Set Qase token to enable integration' + required: false + type: string + +permissions: + contents: read + +jobs: + build-and-test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + token: ${{ github.token }} + ref: ${{ github.sha }} + - name: Configure AWS credentials + uses: aws-actions/configure-aws-credentials@v4 + with: + aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} + aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + aws-region: eu-central-1 + - name: Set up environment + id: set_env_values + run: | + cat "./e2e-tests/.env.ci" >> "./e2e-tests/.env" + - name: Pull with Docker + id: pull_chrome + run: | + docker pull selenoid/vnc_chrome:103.0 + - name: Set up JDK + uses: actions/setup-java@v3 + with: + java-version: '17' + distribution: 'zulu' + cache: 'maven' + - name: Build with Maven + id: build_app + run: | + ./mvnw -B -ntp versions:set -DnewVersion=${{ github.sha }} + ./mvnw -B -V -ntp clean install -Pprod -Dmaven.test.skip=true ${{ github.event.inputs.extraMavenOptions }} + - name: Compose with Docker + id: compose_app + # use the following command until #819 will be fixed + run: | + docker-compose -f e2e-tests/docker/selenoid-git.yaml up -d + docker-compose -f ./documentation/compose/e2e-tests.yaml up -d + - name: Run test suite + run: | + ./mvnw -B -ntp versions:set -DnewVersion=${{ github.sha }} + ./mvnw -B -V -ntp -DQASEIO_API_TOKEN=${{ github.event.inputs.qase_token }} -Dsurefire.suiteXmlFiles='src/test/resources/${{ github.event.inputs.test_suite }}.xml' -Dsuite=${{ github.event.inputs.test_suite }} -f 'e2e-tests' test -Pprod + - name: Generate Allure report + uses: simple-elf/allure-report-action@master + if: always() + id: allure-report + with: + allure_results: ./e2e-tests/allure-results + gh_pages: allure-results + allure_report: allure-report + subfolder: allure-results + report_url: "http://kafkaui-allure-reports.s3-website.eu-central-1.amazonaws.com" + - uses: jakejarvis/s3-sync-action@master + if: always() + env: + AWS_S3_BUCKET: 'kafkaui-allure-reports' + AWS_REGION: 'eu-central-1' + SOURCE_DIR: 'allure-history/allure-results' + - name: Deploy report to Amazon S3 + if: always() + uses: Sibz/github-status-action@v1.1.6 + with: + authToken: ${{secrets.GITHUB_TOKEN}} + context: "Click Details button to open Allure report" + state: "success" + sha: ${{ github.sha }} + target_url: http://kafkaui-allure-reports.s3-website.eu-central-1.amazonaws.com/${{ github.run_number }} + - name: Dump Docker logs on failure + if: failure() + uses: jwalton/gh-docker-logs@v2.2.2 diff --git a/.github/workflows/e2e-manual.yml b/.github/workflows/e2e-manual.yml new file mode 100644 index 000000000..d554bdaa2 --- /dev/null +++ b/.github/workflows/e2e-manual.yml @@ -0,0 +1,47 @@ +name: "E2E: Manual suite" +on: + workflow_dispatch: + inputs: + test_suite: + description: 'Select test suite to run' + default: 'manual' + required: true + type: choice + options: + - manual + - qase + qase_token: + description: 'Set Qase token to enable integration' + required: true + type: string + +permissions: + contents: read + +jobs: + build-and-test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + token: ${{ github.token }} + ref: ${{ github.sha }} + - name: Set up environment + id: set_env_values + run: | + cat "./e2e-tests/.env.ci" >> "./e2e-tests/.env" + - name: Set up JDK + uses: actions/setup-java@v3 + with: + java-version: '17' + distribution: 'zulu' + cache: 'maven' + - name: Build with Maven + id: build_app + run: | + ./mvnw -B -ntp versions:set -DnewVersion=${{ github.sha }} + ./mvnw -B -V -ntp clean install -Pprod -Dmaven.test.skip=true ${{ github.event.inputs.extraMavenOptions }} + - name: Run test suite + run: | + ./mvnw -B -ntp versions:set -DnewVersion=${{ github.sha }} + ./mvnw -B -V -ntp -DQASEIO_API_TOKEN=${{ github.event.inputs.qase_token }} -Dsurefire.suiteXmlFiles='src/test/resources/${{ github.event.inputs.test_suite }}.xml' -Dsuite=${{ github.event.inputs.test_suite }} -f 'e2e-tests' test -Pprod diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml new file mode 100644 index 000000000..72e7c92e1 --- /dev/null +++ b/.github/workflows/e2e-tests.yml @@ -0,0 +1,87 @@ +name: "E2E: PR healthcheck" +on: + pull_request_target: + types: [ "opened", "reopened", "synchronize" ] + paths: + - "pom.xml" + - "contract/**" + - "api/**" + - "serde-api/**" + - "frontend/**" + - "e2e-tests/**" + +permissions: + contents: read + statuses: write + +jobs: + build-and-test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + token: ${{ github.token }} + ref: ${{ github.event.pull_request.head.sha }} + - name: Configure AWS credentials + uses: aws-actions/configure-aws-credentials@v4 + with: + aws-access-key-id: ${{ secrets.S3_AWS_ACCESS_KEY_ID }} + aws-secret-access-key: ${{ secrets.S3_AWS_SECRET_ACCESS_KEY }} + aws-region: eu-central-1 + - name: Set up environment + id: set_env_values + run: | + cat "./e2e-tests/.env.ci" >> "./e2e-tests/.env" + - name: Pull with Docker + id: pull_chrome + run: | + docker pull selenoid/vnc_chrome:103.0 + - name: Set up JDK + uses: actions/setup-java@v3 + with: + java-version: '17' + distribution: 'zulu' + cache: 'maven' + - name: Build with Maven + id: build_app + run: | + ./mvnw -B -ntp versions:set -DnewVersion=${{ github.event.pull_request.head.sha }} + ./mvnw -B -V -ntp clean install -Pprod -Dmaven.test.skip=true ${{ github.event.inputs.extraMavenOptions }} + - name: Compose with Docker + id: compose_app + # use the following command until #819 will be fixed + run: | + docker-compose -f e2e-tests/docker/selenoid-git.yaml up -d + docker-compose -f ./documentation/compose/e2e-tests.yaml up -d && until [ "$(docker exec kafbat-ui wget --spider --server-response http://localhost:8080/actuator/health 2>&1 | grep -c 'HTTP/1.1 200 OK')" == "1" ]; do echo "Waiting for kafka-ui ..." && sleep 1; done + - name: Run test suite + run: | + ./mvnw -B -ntp versions:set -DnewVersion=${{ github.event.pull_request.head.sha }} + ./mvnw -B -V -ntp -Dsurefire.suiteXmlFiles='src/test/resources/smoke.xml' -f 'e2e-tests' test -Pprod + - name: Generate allure report + uses: simple-elf/allure-report-action@master + if: always() + id: allure-report + with: + allure_results: ./e2e-tests/allure-results + gh_pages: allure-results + allure_report: allure-report + subfolder: allure-results + report_url: "http://kafkaui-allure-reports.s3-website.eu-central-1.amazonaws.com" + - uses: jakejarvis/s3-sync-action@master + if: always() + env: + AWS_S3_BUCKET: 'kafkaui-allure-reports' + AWS_REGION: 'eu-central-1' + SOURCE_DIR: 'allure-history/allure-results' + - name: Deploy report to Amazon S3 + if: always() + uses: Sibz/github-status-action@v1.1.6 + with: + authToken: ${{secrets.GITHUB_TOKEN}} + context: "Click Details button to open Allure report" + state: "success" + sha: ${{ github.event.pull_request.head.sha || github.sha }} + target_url: http://kafkaui-allure-reports.s3-website.eu-central-1.amazonaws.com/${{ github.run_number }} + - name: Dump docker logs on failure + if: failure() + uses: jwalton/gh-docker-logs@v2.2.2 diff --git a/.github/workflows/e2e-weekly.yml b/.github/workflows/e2e-weekly.yml new file mode 100644 index 000000000..d8275e473 --- /dev/null +++ b/.github/workflows/e2e-weekly.yml @@ -0,0 +1,79 @@ +name: "E2E: Weekly suite" +on: + schedule: + - cron: '0 1 * * 1' + +permissions: + contents: read + +jobs: + build-and-test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + token: ${{ github.token }} + ref: ${{ github.sha }} + - name: Configure AWS credentials + uses: aws-actions/configure-aws-credentials@v4 + with: + aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} + aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + aws-region: eu-central-1 + - name: Set up environment + id: set_env_values + run: | + cat "./e2e-tests/.env.ci" >> "./e2e-tests/.env" + - name: Pull with Docker + id: pull_chrome + run: | + docker pull selenoid/vnc_chrome:103.0 + - name: Set up JDK + uses: actions/setup-java@v3 + with: + java-version: '17' + distribution: 'zulu' + cache: 'maven' + - name: Build with Maven + id: build_app + run: | + ./mvnw -B -ntp versions:set -DnewVersion=${{ github.sha }} + ./mvnw -B -V -ntp clean install -Pprod -Dmaven.test.skip=true ${{ github.event.inputs.extraMavenOptions }} + - name: Compose with Docker + id: compose_app + # use the following command until #819 will be fixed + run: | + docker-compose -f e2e-tests/docker/selenoid-git.yaml up -d + docker-compose -f ./documentation/compose/e2e-tests.yaml up -d + - name: Run test suite + run: | + ./mvnw -B -ntp versions:set -DnewVersion=${{ github.sha }} + ./mvnw -B -V -ntp -DQASEIO_API_TOKEN=${{ secrets.QASEIO_API_TOKEN }} -Dsurefire.suiteXmlFiles='src/test/resources/sanity.xml' -Dsuite=weekly -f 'e2e-tests' test -Pprod + - name: Generate Allure report + uses: simple-elf/allure-report-action@master + if: always() + id: allure-report + with: + allure_results: ./e2e-tests/allure-results + gh_pages: allure-results + allure_report: allure-report + subfolder: allure-results + report_url: "http://kafkaui-allure-reports.s3-website.eu-central-1.amazonaws.com" + - uses: jakejarvis/s3-sync-action@master + if: always() + env: + AWS_S3_BUCKET: 'kafkaui-allure-reports' + AWS_REGION: 'eu-central-1' + SOURCE_DIR: 'allure-history/allure-results' + - name: Deploy report to Amazon S3 + if: always() + uses: Sibz/github-status-action@v1.1.6 + with: + authToken: ${{secrets.GITHUB_TOKEN}} + context: "Click Details button to open Allure report" + state: "success" + sha: ${{ github.sha }} + target_url: http://kafkaui-allure-reports.s3-website.eu-central-1.amazonaws.com/${{ github.run_number }} + - name: Dump Docker logs on failure + if: failure() + uses: jwalton/gh-docker-logs@v2.2.2