diff --git a/.github/workflows/system-tests.yml b/.github/workflows/system-tests.yml new file mode 100644 index 0000000..c50a9cb --- /dev/null +++ b/.github/workflows/system-tests.yml @@ -0,0 +1,266 @@ +name: Run automated system tests + +on: + push: + branches: + - master + pull_request: + branches: + - master + - support/** + types: [opened, synchronize] + paths-ignore: + - '**/*.md' + release: + types: + - published + workflow_dispatch: + inputs: + neofs-rest-gw_ref: + description: 'neofs-rest-gw ref. Default ref - latest master. Examples: v0.27.0, 8fdcc6d7e798e6511be8806b81894622e72d7fdc, branch_name' + required: false + default: '' + +permissions: write-all + +env: + ALLURE_RESULTS_DIR: ${{ github.workspace }}/allure-results +jobs: + run_system_tests: + runs-on: ubuntu-latest + timeout-minutes: 500 + steps: + - name: Get the current date + id: date + run: echo "::set-output name=timestamp::$(date +%s)" + + - name: Set RUN_ID + env: + TIMESTAMP: ${{ steps.date.outputs.timestamp }} + run: echo "RUN_ID=${{ github.run_number }}-$TIMESTAMP" >> $GITHUB_ENV + + - name: Checkout neofs-testcases repository + uses: actions/checkout@v4 + with: + repository: nspcc-dev/neofs-testcases + ref: master + path: neofs-testcases + + - name: Checkout neofs-rest-gw repository + uses: actions/checkout@v4 + with: + path: neofs-rest-gw + +################################################################# + - name: Set up Go + uses: actions/setup-go@v5 + with: + cache: true + go-version: '1.22' + - run: go version + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: '3.12' + - run: python --version + +# Hashlib uses OpenSSL for ripemd160 and apparently OpenSSL disabled some older crypto algos around version 3.0 +# in November 2021. All the functions are still there but require manual enabling. +# See https://github.com/openssl/openssl/issues/16994 +# But we use ripemd160 for tests. +# For ripemd160 to be supported, we need the openssl configuration file to contain the following lines: +# openssl_conf = openssl_init +# +# [openssl_init] +# providers = provider_sect +# +# [provider_sect] +# default = default_sect +# legacy = legacy_sect +# +# [default_sect] +# activate = 1 +# +# [legacy_sect] +# activate = 1 + - name: Fix OpenSSL ripemd160 + run: | + sudo python ./tools/src/openssl_config_fix.py + working-directory: neofs-testcases + + - name: Build neofs-rest-gw binaries + run: | + make all + working-directory: neofs-rest-gw + + - name: Download latest stable neofs-adm + uses: dsaltares/fetch-gh-release-asset@1.1.1 + with: + repo: 'nspcc-dev/neofs-node' + version: 'tags/v0.40.1' + file: 'neofs-adm-linux-amd64' + target: 'neofs-testcases/neofs-adm' + + - name: Download latest stable neofs-cli + uses: dsaltares/fetch-gh-release-asset@1.1.1 + with: + repo: 'nspcc-dev/neofs-node' + version: 'tags/v0.40.1' + file: 'neofs-cli-linux-amd64' + target: 'neofs-testcases/neofs-cli' + + - name: Download latest stable neofs-ir + uses: dsaltares/fetch-gh-release-asset@1.1.1 + with: + repo: 'nspcc-dev/neofs-node' + version: 'tags/v0.40.1' + file: 'neofs-ir-linux-amd64' + target: 'neofs-testcases/neofs-ir' + + - name: Download latest stable neofs-lens + uses: dsaltares/fetch-gh-release-asset@1.1.1 + with: + repo: 'nspcc-dev/neofs-node' + version: 'tags/v0.40.1' + file: 'neofs-lens-linux-amd64' + target: 'neofs-testcases/neofs-lens' + + - name: Download latest stable neofs-node + uses: dsaltares/fetch-gh-release-asset@1.1.1 + with: + repo: 'nspcc-dev/neofs-node' + version: 'tags/v0.40.1' + file: 'neofs-node-linux-amd64' + target: 'neofs-testcases/neofs-node' + + - name: Download latest stable neo-go + uses: dsaltares/fetch-gh-release-asset@1.1.1 + with: + repo: 'nspcc-dev/neo-go' + version: 'tags/v0.104.0' + file: 'neo-go-linux-amd64' + target: 'neofs-testcases/neo-go' + + - name: Download latest stable neofs-s3-gw + uses: dsaltares/fetch-gh-release-asset@1.1.1 + with: + repo: 'nspcc-dev/neofs-s3-gw' + version: 'tags/v0.29.0' + file: 'neofs-s3-gw-linux-amd64' + target: 'neofs-testcases/neofs-s3-gw' + + - name: Download latest stable neofs-s3-gw-authmate + uses: dsaltares/fetch-gh-release-asset@1.1.1 + with: + repo: 'nspcc-dev/neofs-s3-gw' + version: 'tags/v0.29.0' + file: 'neofs-s3-authmate-linux-amd64' + target: 'neofs-testcases/neofs-s3-authmate' + + - name: Prepare venv + timeout-minutes: 30 + run: | + make venv.pytest + echo "$(pwd)" >> $GITHUB_PATH + working-directory: neofs-testcases + + - name: Copy neofs-rest-gw binaries to testcases directory + run: | + cp bin/* ${GITHUB_WORKSPACE}/neofs-testcases/ + working-directory: neofs-rest-gw + + - name: Chmod binaries + run: | + sudo chmod a+x neofs-cli + sudo chmod a+x neofs-adm + sudo chmod a+x neofs-ir + sudo chmod a+x neofs-lens + sudo chmod a+x neofs-node + sudo chmod a+x neofs-rest-gw + sudo chmod a+x neo-go + sudo chmod a+x neofs-s3-authmate + sudo chmod a+x neofs-s3-gw + working-directory: neofs-testcases + + - name: Log environment + run: | + echo "Check free space" + df -h + echo "==========================================" + + echo "Check neo-go version" + neo-go --version + echo "==========================================" + + echo "Check neofs-s3-authmate version" + neofs-s3-authmate --version + echo "==========================================" + + echo "Check neofs-s3-gw version" + echo "==========================================" + neofs-s3-gw --version + echo "==========================================" + + echo "Check neofs-adm version" + neofs-adm --version + echo "==========================================" + + echo "Check neofs-rest-gw version" + neofs-rest-gw --version + echo "==========================================" + + echo "Check neofs-ir version" + neofs-ir --version + echo "==========================================" + + echo "Check neofs-lens version" + neofs-lens --version + echo "==========================================" + + echo "Check neofs-cli version" + neofs-cli --version + echo "==========================================" + + echo "Check current dir" + ls -lah + echo "==========================================" + working-directory: neofs-testcases + + - name: Run rest gw system tests + timeout-minutes: 120 + if: github.event_name == 'pull_request' + run: | + source venv.pytest/bin/activate && pytest --alluredir=${{ env.ALLURE_RESULTS_DIR }} pytest_tests/tests/services/rest_gate + working-directory: neofs-testcases + + - name: Publish to NeoFS + id: put_report + if: always() && steps.prepare_test_env.outcome == 'success' + uses: nspcc-dev/gh-push-allure-report-to-neofs@master + 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 link to report + id: post_report_link + timeout-minutes: 60 + if: always() && steps.put_report.outcome == 'success' + env: + REPORT_NEOFS_URL: ${{ steps.put_report.outputs.REPORT_NEOFS_URL }}index.html + uses: Sibz/github-status-action@v1 + with: + authToken: ${{secrets.GITHUB_TOKEN}} + context: 'System tests report' + state: 'success' + sha: ${{github.event.pull_request.head.sha || github.sha}} + target_url: ${{ env.REPORT_NEOFS_URL }}