| name: E2E test for pull request |
| |
| # read-write repo token |
| # access to secrets |
| on: |
| workflow_run: |
| workflows: ["PR-CI"] |
| types: |
| - completed |
| |
| env: |
| DOCKER_REPO: apache/rocketmq-ci |
| |
| jobs: |
| docker: |
| if: > |
| github.repository == 'apache/rocketmq' && |
| github.event.workflow_run.event == 'pull_request' && |
| github.event.workflow_run.conclusion == 'success' |
| runs-on: ubuntu-latest |
| timeout-minutes: 30 |
| strategy: |
| matrix: |
| base-image: ["ubuntu"] |
| java-version: ["8"] |
| steps: |
| - name: 'Download artifact' |
| uses: actions/github-script@v6 |
| with: |
| script: | |
| let artifacts = await github.rest.actions.listWorkflowRunArtifacts({ |
| owner: context.repo.owner, |
| repo: context.repo.repo, |
| run_id: ${{github.event.workflow_run.id }}, |
| }); |
| let matchArtifactRmq = artifacts.data.artifacts.filter((artifact) => { |
| return artifact.name == "rocketmq" |
| })[0]; |
| let download = await github.rest.actions.downloadArtifact({ |
| owner: context.repo.owner, |
| repo: context.repo.repo, |
| artifact_id: matchArtifactRmq.id, |
| archive_format: 'zip', |
| }); |
| var fs = require('fs'); |
| fs.writeFileSync('${{github.workspace}}/rocketmq.zip', Buffer.from(download.data)); |
| - run: | |
| unzip rocketmq.zip |
| mkdir rocketmq |
| cp -r rocketmq-* rocketmq/ |
| ls |
| - uses: actions/checkout@v3 |
| with: |
| repository: apache/rocketmq-docker.git |
| ref: master |
| path: rocketmq-docker |
| - name: docker-login |
| uses: docker/login-action@v2 |
| with: |
| registry: ${{ env.REGISTRY }} |
| username: ${{ secrets.DOCKERHUB_USER }} |
| password: ${{ secrets.DOCKERHUB_TOKEN }} |
| - name: Build and save docker images |
| id: build-images |
| run: | |
| cd rocketmq-docker/image-build-ci |
| version=${{ github.event.pull_request.number || github.ref_name }}-$(uuidgen) |
| mkdir versionlist |
| touch versionlist/"${version}-`echo ${{ matrix.base-image }} | sed -e "s/:/-/g"`" |
| sh ./build-image-local.sh ${version} ${{ matrix.base-image }} ${{ matrix.java-version }} ${DOCKER_REPO} |
| - uses: actions/upload-artifact@v4 |
| name: Upload distribution tar |
| with: |
| name: versionlist |
| path: rocketmq-docker/image-build-ci/versionlist/* |
| |
| list-version: |
| if: > |
| github.repository == 'apache/rocketmq' && |
| always() |
| name: List version |
| needs: [docker] |
| runs-on: ubuntu-latest |
| timeout-minutes: 30 |
| outputs: |
| version-json: ${{ steps.show_versions.outputs.version-json }} |
| steps: |
| - uses: actions/download-artifact@v4 |
| name: Download versionlist |
| with: |
| name: versionlist |
| path: versionlist |
| - name: Show versions |
| id: show_versions |
| run: | |
| a=(`ls versionlist`) |
| printf '%s\n' "${a[@]}" | jq -R . | jq -s . |
| echo version-json=`printf '%s\n' "${a[@]}" | jq -R . | jq -s .` >> $GITHUB_OUTPUT |
| |
| deploy: |
| if: ${{ success() }} |
| name: Deploy RocketMQ |
| needs: [list-version,docker] |
| runs-on: ubuntu-latest |
| timeout-minutes: 60 |
| strategy: |
| matrix: |
| version: ${{ fromJSON(needs.list-version.outputs.version-json) }} |
| steps: |
| - uses: apache/rocketmq-test-tool@7d84d276ad7755b1dc5cf9657a7a9bff6ae6d288 |
| name: Deploy rocketmq |
| with: |
| action: "deploy" |
| ask-config: "${{ secrets.ASK_CONFIG_VIRGINA }}" |
| test-version: "${{ matrix.version }}" |
| chart-git: "https://ghproxy.com/https://github.com/apache/rocketmq-docker.git" |
| chart-branch: "master" |
| chart-path: "./rocketmq-k8s-helm" |
| job-id: ${{ strategy.job-index }} |
| helm-values: | |
| nameserver: |
| image: |
| repository: ${{env.DOCKER_REPO}} |
| tag: ${{ matrix.version }} |
| broker: |
| image: |
| repository: ${{env.DOCKER_REPO}} |
| tag: ${{ matrix.version }} |
| proxy: |
| image: |
| repository: ${{env.DOCKER_REPO}} |
| tag: ${{ matrix.version }} |
| test-e2e-grpc-java: |
| if: ${{ success() }} |
| name: Test E2E grpc java |
| needs: [list-version, deploy] |
| runs-on: ubuntu-latest |
| timeout-minutes: 60 |
| strategy: |
| matrix: |
| version: ${{ fromJSON(needs.list-version.outputs.version-json) }} |
| steps: |
| - uses: apache/rocketmq-test-tool@7d84d276ad7755b1dc5cf9657a7a9bff6ae6d288 |
| name: e2e test |
| with: |
| action: "test" |
| ask-config: "${{ secrets.ASK_CONFIG_VIRGINA }}" |
| test-version: "${{ matrix.version }}" |
| test-code-git: "https://ghproxy.com/https://github.com/apache/rocketmq-e2e" |
| test-code-branch: "master" |
| test-code-path: java/e2e |
| test-cmd: "mvn -B test" |
| job-id: 0 |
| - name: Publish Test Report |
| uses: mikepenz/action-junit-report@v3 |
| if: always() # always run even if the previous step fails |
| with: |
| report_paths: '**/test_report/TEST-*.xml' |
| annotate_only: true |
| include_passed: true |
| detailed_summary: true |
| - uses: actions/upload-artifact@v4 |
| if: always() |
| name: Upload test log |
| with: |
| name: test-e2e-grpc-java-log.txt |
| path: testlog.txt |
| |
| test-e2e-golang: |
| if: ${{ success() }} |
| name: Test E2E golang |
| needs: [list-version, deploy] |
| runs-on: ubuntu-latest |
| timeout-minutes: 60 |
| strategy: |
| matrix: |
| version: ${{ fromJSON(needs.list-version.outputs.version-json) }} |
| steps: |
| - uses: apache/rocketmq-test-tool@7d84d276ad7755b1dc5cf9657a7a9bff6ae6d288 |
| name: e2e test |
| with: |
| action: "test" |
| ask-config: "${{ secrets.ASK_CONFIG_VIRGINA }}" |
| test-version: "${{ matrix.version }}" |
| test-code-git: "https://ghproxy.com/https://github.com/apache/rocketmq-e2e" |
| test-code-branch: "master" |
| test-code-path: golang |
| test-cmd: | |
| cd ../common && mvn -Prelease -DskipTests clean package -U |
| cd ../rocketmq-admintools && source bin/env.sh |
| LATEST_GO_VERSION=$(curl -s https://go.dev/VERSION?m=text | awk 'NR==1') |
| wget "https://go.dev/dl/${LATEST_GO_VERSION}.linux-amd64.tar.gz" && \ |
| rm -rf /usr/local/go && tar -C /usr/local -xzf ${LATEST_GO_VERSION}.linux-amd64.tar.gz |
| cd ../golang && go get -u github.com/apache/rocketmq-clients/golang && gotestsum --junitfile ./target/surefire-reports/TEST-report.xml ./mqgotest/... -timeout 2m -v |
| job-id: 0 |
| - name: Publish Test Report |
| uses: mikepenz/action-junit-report@v3 |
| if: always() # always run even if the previous step fails |
| with: |
| report_paths: '**/test_report/TEST-*.xml' |
| annotate_only: true |
| include_passed: true |
| detailed_summary: true |
| - uses: actions/upload-artifact@v4 |
| if: always() |
| name: Upload test log |
| with: |
| name: test-e2e-golang-log.txt |
| path: testlog.txt |
| |
| test-e2e-remoting-java: |
| if: ${{ success() }} |
| name: Test E2E remoting java |
| needs: [ list-version, deploy ] |
| runs-on: ubuntu-latest |
| timeout-minutes: 60 |
| strategy: |
| matrix: |
| version: ${{ fromJSON(needs.list-version.outputs.version-json) }} |
| steps: |
| - uses: apache/rocketmq-test-tool@7d84d276ad7755b1dc5cf9657a7a9bff6ae6d288 |
| name: e2e test |
| with: |
| action: "test" |
| ask-config: "${{ secrets.ASK_CONFIG_VIRGINA }}" |
| test-version: "${{ matrix.version }}" |
| test-code-git: "https://ghproxy.com/https://github.com/apache/rocketmq-e2e" |
| test-code-branch: "master" |
| test-code-path: java/e2e-v4 |
| test-cmd: "mvn -B test" |
| job-id: 0 |
| - name: Publish Test Report |
| uses: mikepenz/action-junit-report@v3 |
| if: always() # always run even if the previous step fails |
| with: |
| report_paths: '**/test_report/TEST-*.xml' |
| annotate_only: true |
| include_passed: true |
| detailed_summary: true |
| - uses: actions/upload-artifact@v4 |
| if: always() |
| name: Upload test log |
| with: |
| name: test-e2e-remoting-java-log.txt |
| path: testlog.txt |
| |
| clean: |
| if: always() |
| name: Clean |
| needs: [list-version, test-e2e-grpc-java, test-e2e-golang, test-e2e-remoting-java] |
| runs-on: ubuntu-latest |
| timeout-minutes: 60 |
| strategy: |
| matrix: |
| version: ${{ fromJSON(needs.list-version.outputs.version-json) }} |
| steps: |
| - uses: apache/rocketmq-test-tool@7d84d276ad7755b1dc5cf9657a7a9bff6ae6d288 |
| name: clean |
| with: |
| action: "clean" |
| ask-config: "${{ secrets.ASK_CONFIG_VIRGINA }}" |
| test-version: "${{ matrix.version }}" |
| job-id: ${{ strategy.job-index }} |