Skip to content

workflows: add build/release workflow #1267

workflows: add build/release workflow

workflows: add build/release workflow #1267

Workflow file for this run

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_node_ref:
description: 'Neofs-node ref. Default ref - latest master. Examples: v0.36.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: Checkout neofs-testcases repository
uses: actions/checkout@v4
with:
repository: nspcc-dev/neofs-testcases
ref: 'master'
path: neofs-testcases
- name: Checkout neofs-dev-env repository
uses: actions/checkout@v4
with:
repository: nspcc-dev/neofs-dev-env
ref: 'af001f8052a203eab408af2bf3a41c7e5af2ac11'
path: neofs-dev-env
- name: Checkout neofs-node repository
uses: actions/checkout@v4
with:
path: neofs-node
#################################################################
- name: Set up Go
uses: actions/setup-go@v5
with:
cache: true
go-version: '1.20'
- run: go version
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.10.11'
- 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-node (neofs-cli and neofs-adm)
timeout-minutes: 5
run: |
make all
echo "$(pwd)/bin" >> $GITHUB_PATH
working-directory: neofs-node
################################################################
- name: Get TAG for docker images
run: |
echo "CURRENT_TAG=$( make version | sed 's/^v//' )" >> $GITHUB_ENV
working-directory: neofs-node
- name: Build NeoFS storage docker image
timeout-minutes: 30
run: |
make image-storage
working-directory: neofs-node
- name: Build NeoFS Inner Ring docker image
timeout-minutes: 30
run: |
make image-ir
working-directory: neofs-node
- name: Add NeoFS storage and NeoFS ir docker TAGs to testcases-env config file
run: |
sed -i "s/NODE_VERSION=.*/NODE_VERSION=${{ env.CURRENT_TAG }}/g" .github/testcases-env
sed -i "s/IR_VERSION=.*/IR_VERSION=${{ env.CURRENT_TAG }}/g" .github/testcases-env
working-directory: neofs-node
################################################################
- name: Copy testcases-env file to testcases-env in neofs-dev-env
run: |
cp .github/testcases-env ${GITHUB_WORKSPACE}/neofs-dev-env/.env
working-directory: neofs-node
- name: Prepare hosts
timeout-minutes: 5
run: |
make get
sudo ./bin/update_hosts.sh
sudo chmod a+w vendor/hosts
working-directory: neofs-dev-env
- name: Prepare venv
timeout-minutes: 30
run: |
make venv.local-pytest
working-directory: neofs-testcases
- name: Prepare test environment
id: prepare_test_env
timeout-minutes: 30
run: |
make prepare-test-env
echo "$(pwd)/vendor" >> $GITHUB_PATH
working-directory: neofs-dev-env
################################################################
- name: Log environment
run: |
echo "Check free space"
df -h
echo "=========================================="
echo "Check /etc/hosts"
cat /etc/hosts
echo "=========================================="
echo "Check docker images"
docker images
echo "=========================================="
echo "Check docker ps"
docker ps
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-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 vendor dir"
ls -lah "${GITHUB_WORKSPACE}/neofs-dev-env/vendor"
echo "=========================================="
echo "Check bin dir"
ls -lah "${GITHUB_WORKSPACE}/neofs-node/bin"
echo "=========================================="
working-directory: neofs-dev-env
################################################################
- name: Run Sanity tests for pull requests
timeout-minutes: 120
if: github.event_name == 'pull_request'
env:
ALLURE_RESULTS_DIR: ${{ env.ALLURE_RESULTS_DIR }}
run: |
source venv.local-pytest/bin/activate && pytest --show-capture=no -m "sanity" --alluredir="$ALLURE_RESULTS_DIR" pytest_tests/testsuites
working-directory: neofs-testcases
- name: Run all tests for other events
timeout-minutes: 480
if: github.event_name != 'pull_request'
env:
ALLURE_RESULTS_DIR: ${{ env.ALLURE_RESULTS_DIR }}
run: |
source venv.local-pytest/bin/activate && pytest --alluredir="$ALLURE_RESULTS_DIR" pytest_tests/testsuites
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 the link to the 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: 'Test report'
state: 'success'
sha: ${{github.event.pull_request.head.sha || github.sha}}
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: Post the link to the docker logs
timeout-minutes: 60
if: always() && ( steps.post_dockers_logs.outcome == 'success' )
env:
TEST_RESULTS_HTTP_GATE: ${{ vars.TEST_RESULTS_HTTP_GATE }}
TEST_RESULTS_CID: ${{ vars.TEST_RESULTS_CID }}
uses: Sibz/github-status-action@v1
with:
authToken: ${{secrets.GITHUB_TOKEN}}
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