diff --git a/.github/workflows/system-tests.yml b/.github/workflows/system-tests.yml index e334e81e0..6713cb19f 100644 --- a/.github/workflows/system-tests.yml +++ b/.github/workflows/system-tests.yml @@ -23,6 +23,8 @@ on: permissions: write-all +env: + ALLURE_RESULTS_DIR: ${{ github.workspace }}/allure-results jobs: run_system_tests: runs-on: ubuntu-latest @@ -56,19 +58,6 @@ jobs: ref: 'af001f8052a203eab408af2bf3a41c7e5af2ac11' path: neofs-dev-env - - name: Download latest stable neofs-cli for uploading reports to NeoFS - uses: dsaltares/fetch-gh-release-asset@1.1.1 - with: - repo: 'nspcc-dev/neofs-node' - version: 'tags/v0.38.1' - file: 'neofs-cli-amd64' - target: 'neofs-node-stable/neofs-cli' - - - name: Chmod latest stable neofs-cli - run: | - sudo chmod a+x neofs-cli - working-directory: neofs-node-stable - ################################################################# - name: Set up Go uses: actions/setup-go@v4 @@ -210,106 +199,102 @@ jobs: ################################################################ - name: Run Sanity tests for pull requests + env: + ALLURE_RESULTS_DIR: ${{ github.workspace }}/allure-results timeout-minutes: 120 if: github.event_name == 'pull_request' run: | - source venv.local-pytest/bin/activate && pytest --show-capture=no -m "sanity" --alluredir=${GITHUB_WORKSPACE}/allure-results pytest_tests/testsuites/services/s3_gate + source venv.local-pytest/bin/activate && pytest --show-capture=no -m "sanity" --alluredir="$ALLURE_RESULTS_DIR" pytest_tests/testsuites/services/s3_gate/test_s3_bucket.py working-directory: neofs-testcases - name: Run all tests for other events + env: + ALLURE_RESULTS_DIR: ${{ github.workspace }}/allure-results timeout-minutes: 480 if: github.event_name != 'pull_request' run: | - source venv.local-pytest/bin/activate && pytest --show-capture=no --alluredir=${GITHUB_WORKSPACE}/allure-results pytest_tests/testsuites/services/s3_gate + source venv.local-pytest/bin/activate && pytest --show-capture=no --alluredir="$ALLURE_RESULTS_DIR" pytest_tests/testsuites/services/s3_gate/test_s3_tagging.py working-directory: neofs-testcases ################################################################ - - name: Generate Allure report - timeout-minutes: 60 - uses: simple-elf/allure-report-action@v1.6 - if: always() - id: allure-report - with: - keep_reports: 100000 - allure_results: allure-results - allure_report: allure-report - allure_history: allure-history - - - name: Create wallet - if: always() - env: - TEST_RESULTS_WALLET: ${{ secrets.TEST_RESULTS_WALLET }} - run: | - echo "$TEST_RESULTS_WALLET" | base64 -d > wallet.json - working-directory: neofs-testcases - - - name: Define expiration - if: always() - env: - TEST_RESULTS_NEOFS_NETWORK_DOMAIN: ${{ vars.TEST_RESULTS_NEOFS_NETWORK_DOMAIN }} - MASTER_EXPIRATION_PERIOD: ${{ vars.MASTER_EXPIRATION_PERIOD }} - PR_EXPIRATION_PERIOD: ${{ vars.PR_EXPIRATION_PERIOD }} - MANUAL_RUN_EXPIRATION_PERIOD: ${{ vars.MANUAL_RUN_EXPIRATION_PERIOD }} - OTHER_EXPIRATION_PERIOD: ${{ vars.OTHER_EXPIRATION_PERIOD }} - run: | - CURRENT_EPOCH=$(neofs-cli netmap epoch --rpc-endpoint st1.$TEST_RESULTS_NEOFS_NETWORK_DOMAIN:8080) - if [[ "${{ github.event_name }}" == "push" ]]; then - EXP_EPOCH=$((MASTER_EXPIRATION_PERIOD + CURRENT_EPOCH)) - elif [[ "${{ github.event_name }}" == "pull_request" ]]; then - EXP_EPOCH=$((PR_EXPIRATION_PERIOD + CURRENT_EPOCH)) - elif [[ "${{ github.event_name }}" == "release" ]]; then - EXP_EPOCH=0 # For test reports from releases - no expiration period - elif [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then - EXP_EPOCH=$((MANUAL_RUN_EXPIRATION_PERIOD + CURRENT_EPOCH)) - else - EXP_EPOCH=$((OTHER_EXPIRATION_PERIOD + CURRENT_EPOCH)) - fi - echo "EXP_EPOCH=$EXP_EPOCH" >> $GITHUB_ENV - working-directory: neofs-testcases - - name: Put allure report to NeoFS + - name: Publish to NeoFS id: put_report if: always() && steps.prepare_test_env.outcome == 'success' - env: - TEST_RESULTS_PASSWORD: ${{ secrets.TEST_RESULTS_PASSWORD }} - TEST_RESULTS_NEOFS_NETWORK_DOMAIN: ${{ vars.TEST_RESULTS_NEOFS_NETWORK_DOMAIN }} - TEST_RESULTS_CID: ${{ vars.TEST_RESULTS_CID }} - run: | - sudo chmod -R a+rw ${GITHUB_WORKSPACE}/allure-report - source venv.local-pytest/bin/activate && python ./tools/src/process-allure-reports.py \ - --expire-at $EXP_EPOCH --neofs_domain $TEST_RESULTS_NEOFS_NETWORK_DOMAIN --run_id $RUN_ID \ - --cid $TEST_RESULTS_CID --allure_report ${GITHUB_WORKSPACE}/allure-report --wallet wallet.json - working-directory: neofs-testcases + # uses: nspcc-dev/gh-push-allure-report-to-neofs@master + uses: vvarg229/gh-push-allure-report-to-neofs@fix-debug + with: + NEOFS_WALLET: ${{ secrets.TEST_RESULTS_WALLET }} + NEOFS_WALLET_PASSWORD: ${{ secrets.TEST_RESULTS_PASSWORD }} + NEOFS_NETWORK_DOMAIN: ${{ vars.TEST_RESULTS_NEOFS_NETWORK_DOMAIN }} + NEOFS_HTTP_GATE: ${{ vars.TEST_RESULTS_HTTP_GATE }} + STORE_OBJECTS_CID: ${{ vars.TEST_RESULTS_CID }} + PR_LIFETIME: ${{ vars.PR_EXPIRATION_PERIOD }} + MASTER_LIFETIME: ${{ vars.MASTER_EXPIRATION_PERIOD }} + MANUAL_RUN_LIFETIME: ${{ vars.MANUAL_RUN_EXPIRATION_PERIOD }} + OTHER_LIFETIME: ${{ vars.OTHER_EXPIRATION_PERIOD }} + ALLURE_RESULTS_DIR: ${{ env.ALLURE_RESULTS_DIR }} + ALLURE_GENERATED_DIR: 'neofs-test-allure-generated-report' - name: Post the link to the report id: post_report_link timeout-minutes: 60 if: always() && steps.put_report.outcome == 'success' env: - TEST_RESULTS_HTTP_GATE: ${{ vars.TEST_RESULTS_HTTP_GATE }} - TEST_RESULTS_CID: ${{ vars.TEST_RESULTS_CID }} + REPORT_NEOFS_URL: ${{ steps.put_report.outputs.REPORT_NEOFS_URL }}index.html uses: Sibz/github-status-action@v1 with: authToken: ${{secrets.GITHUB_TOKEN}} - context: 'Test report' + context: 'System tests report' state: 'success' sha: ${{github.event.pull_request.head.sha || github.sha}} - target_url: https://${{ env.TEST_RESULTS_HTTP_GATE }}/${{ env.TEST_RESULTS_CID }}/${{ env.RUN_ID }}/index.html + target_url: ${{ env.REPORT_NEOFS_URL }} + + + # - name: Post only docker logs + # id: post_dockers_logs + # if: always() && ( steps.prepare_test_env.outcome != 'success' || steps.put_report.outcome != 'success' ) + # env: + # TEST_RESULTS_PASSWORD: ${{ secrets.TEST_RESULTS_PASSWORD }} + # TEST_RESULTS_NEOFS_NETWORK_DOMAIN: ${{ vars.TEST_RESULTS_NEOFS_NETWORK_DOMAIN }} + # TEST_RESULTS_CID: ${{ vars.TEST_RESULTS_CID }} + # run: | + # source venv.local-pytest/bin/activate && python ./tools/src/zip_dev_env_logs.py + # NEOFS_CLI_PASSWORD=$TEST_RESULTS_PASSWORD neofs-cli --rpc-endpoint st1.$TEST_RESULTS_NEOFS_NETWORK_DOMAIN:8080 \ + # --wallet wallet.json object put --file containers_logs.zip --cid $TEST_RESULTS_CID --timeout 1200s \ + # --expire-at $EXP_EPOCH \ + # --attributes FilePath=$RUN_ID/data/containers_logs.zip,RunNumber=$RUN_ID,ContentType=application/zip + # working-directory: neofs-testcases + + - name: Gather docker logs + id: gather_dockers_logs + if: always() + # && ( steps.prepare_test_env.outcome != 'success' || steps.put_report.outcome != 'success' ) + env: + DOCKER_LOGS: ${{ github.workspace }}/${{ vars.TEST_RESULTS_CID }}/${{ env.RUN_ID }}/data/docker-logs + run: | + source venv.local-pytest/bin/activate + mkdir -p $DOCKER_LOGS && cd $DOCKER_LOGS + python ${{ github.workspace }}/neofs-testcases/tools/src/zip_dev_env_logs.py + working-directory: neofs-testcases - name: Post only docker logs + uses: nspcc-dev/gh-push-to-neofs@master id: post_dockers_logs - if: always() && ( steps.prepare_test_env.outcome != 'success' || steps.put_report.outcome != 'success' ) - env: - TEST_RESULTS_PASSWORD: ${{ secrets.TEST_RESULTS_PASSWORD }} - TEST_RESULTS_NEOFS_NETWORK_DOMAIN: ${{ vars.TEST_RESULTS_NEOFS_NETWORK_DOMAIN }} - TEST_RESULTS_CID: ${{ vars.TEST_RESULTS_CID }} - run: | - source venv.local-pytest/bin/activate && python ./tools/src/zip_dev_env_logs.py - NEOFS_CLI_PASSWORD=$TEST_RESULTS_PASSWORD neofs-cli --rpc-endpoint st1.$TEST_RESULTS_NEOFS_NETWORK_DOMAIN:8080 \ - --wallet wallet.json object put --file containers_logs.zip --cid $TEST_RESULTS_CID --timeout 1200s \ - --expire-at $EXP_EPOCH \ - --attributes FilePath=$RUN_ID/data/containers_logs.zip,RunNumber=$RUN_ID,ContentType=application/zip - working-directory: neofs-testcases + env: + DOCKER_LOGS: ${{ github.workspace }}/${{ vars.TEST_RESULTS_CID }}/${{ env.RUN_ID }}/data/docker-logs + if: always() + # && ( steps.gather_dockers_logs.outcome != 'success' || steps.put_report.outcome != 'success' ) + with: + NEOFS_WALLET: ${{ secrets.TEST_RESULTS_WALLET }} + NEOFS_WALLET_PASSWORD: ${{ secrets.TEST_RESULTS_PASSWORD }} + NEOFS_NETWORK_DOMAIN: ${{ vars.TEST_RESULTS_NEOFS_NETWORK_DOMAIN }} + NEOFS_HTTP_GATE: ${{ vars.TEST_RESULTS_HTTP_GATE }} + STORE_OBJECTS_CID: ${{ vars.TEST_RESULTS_CID }} + LIFETIME: ${{ vars.OTHER_EXPIRATION_PERIOD }} + PATH_TO_FILES_DIR: ${{ env.DOCKER_LOGS }} + URL_PREFIX: ${{ env.RUN_ID }}/data + - name: Post the link to the docker logs timeout-minutes: 60 @@ -323,4 +308,4 @@ jobs: context: 'Docker logs' state: 'success' sha: ${{github.event.pull_request.head.sha || github.sha}} - target_url: https://${{ env.TEST_RESULTS_HTTP_GATE }}/${{ env.TEST_RESULTS_CID }}/${{ env.RUN_ID }}/data/containers_logs.zip + target_url: https://${{ env.TEST_RESULTS_HTTP_GATE }}/${{ env.TEST_RESULTS_CID }}/${{ env.RUN_ID }}/data/docker-logs/containers_logs.zip