Skip to content

Refactor test setup, add interface to write DIDs on ledger #5588

Refactor test setup, add interface to write DIDs on ledger

Refactor test setup, add interface to write DIDs on ledger #5588

Workflow file for this run

name: CI
on:
push:
branches:
- main
pull_request:
branches:
- "**"
env:
DOCKER_BUILDKIT: 1
MAIN_BRANCH: main
URL_DOCKER_REGISTRY: ghcr.io
DOCKER_IMAGE_AGENCY: ghcr.io/absaoss/vcxagencynode/vcxagency-node:2.6.0
DOCKER_IMAGE_POOL: ghcr.io/hyperledger/aries-vcx/indy_pool_localhost:1.15.0
DOCKER_REPO_LOCAL_ALPINE_CORE: alpine-core
DOCKER_REPO_LOCAL_LIBVCX: libvcx
DOCKER_REPO_LOCAL_ANDROID: android-test
DOCKER_REPO_LOCAL_VDRPROXY: vdrproxy
RUST_TOOLCHAIN_VERSON: 1.65.0
NODE_VERSION: 18.x
jobs:
verify-code-formatting:
runs-on: ubuntu-20.04
steps:
- name: "Git checkout"
uses: actions/checkout@v3
- uses: actions-rs/toolchain@v1
with:
toolchain: 1.65.0
components: rustfmt, clippy
- name: "Verify code formatting"
run: |
cargo fmt --check
workflow-setup:
runs-on: ubuntu-20.04
outputs:
PUBLISH_VERSION: ${{ steps.run-info.outputs.publish-version }}
RELEASE: ${{ steps.run-info.outputs.release }}
PRERELEASE: ${{ steps.run-info.outputs.pre-release }}
BRANCH_NAME: ${{ steps.run-info.outputs.branch-name }}
IS_FORK: ${{ steps.run-info.outputs.is-fork }}
SKIP_IOS: ${{ steps.skip-info.outputs.skip-ios }}
SKIP_ANDROID: ${{ steps.skip-info.outputs.skip-android }}
SKIP_NAPI_M1: ${{ steps.skip-info.outputs.skip-napi-m1 }}
SKIP_CI: ${{ steps.skip-info.outputs.skip-ci }}
DOCKER_IMG_CACHED_ALPINE_CORE: ${{ steps.docker-imgs.outputs.DOCKER_IMG_CACHED_ALPINE_CORE }}
DOCKER_IMG_CACHED_LIBVCX: ${{ steps.docker-imgs.outputs.DOCKER_IMG_CACHED_LIBVCX }}
DOCKER_IMG_CACHED_ANDROID: ${{ steps.docker-imgs.outputs.DOCKER_IMG_CACHED_ANDROID }}
DOCKER_IMG_CACHED_VDRPROXY: ${{ steps.docker-imgs.outputs.DOCKER_IMG_CACHED_VDRPROXY }}
steps:
- name: "Git checkout"
uses: actions/checkout@v1
- uses: actions-rs/toolchain@v1
with:
toolchain: 1.65.0
- name: "Construct CI run-info"
id: run-info
uses: ./.github/actions/construct-run-info
- name: "Detect CI skip steps"
id: skip-info
uses: ./.github/actions/detect-skip-info
- name: "Set outputs"
id: docker-imgs
run: |
set -x
HASH_DOCKERFILE_ALPINE_CORE=${{ hashFiles('ci/alpine_core.dockerfile')}}
HASH_DOCKERFILE_LIBVCX=${{ hashFiles('ci/libvcx.dockerfile') }}
HASH_DOCKERFILE_VDRPROXY=${{ hashFiles('ci/vdrproxy.dockerfile') }}
HASH_SRC_LIBVDRTOOLS=${{ hashFiles('libvdrtools') }}
HASH_SRC_LIBVCX=${{ hashFiles('libvcx') }}
HASH_SRC_ARIESVCX=${{ hashFiles('aries_vcx') }}
HASH_SRC_ARIESVCX_CORE=${{ hashFiles('aries_vcx_core') }}
HASH_SRC_AGENCYCLIENT=${{ hashFiles('agency_client') }}
HASH_SRC_DIDDOC=${{ hashFiles('diddoc') }}
HASH_SRC_MESSAGES=${{ hashFiles('messages') }}
HASH_SRC_WRAPPER_JAVA=${{ hashFiles('wrappers/java') }}
SEED_HASH_ARIESVCX=${HASH_SRC_LIBVDRTOOLS:0:11}-${HASH_SRC_ARIESVCX_CORE:0:11}-${HASH_SRC_ARIESVCX:0:11}-${HASH_SRC_AGENCYCLIENT:0:11}-${HASH_SRC_DIDDOC:0:11}-${HASH_SRC_MESSAGES:0:11}}
HASH_ARIESVCX=$(echo -n "$SEED_HASH_ARIESVCX" | sha256sum | awk '{print $1}')
SEED_HASH_DOCKER_LIBVCX=${HASH_ARIESVCX:0:11}-${HASH_DOCKERFILE_LIBVCX:0:11}-${HASH_SRC_LIBVCX:0:11}
HASH_DOCKER_LIBVCX=$(echo -n "$SEED_HASH_DOCKER_LIBVCX" | sha256sum | awk '{print $1}')
SEED_HASH_DOCKER_ANDROID=${HASH_ARIESVCX:0:11}-${HASH_DOCKER_LIBVCX:0:11}-${HASH_SRC_WRAPPER_JAVA:0:11}
HASH_DOCKER_ANDROID=$(echo -n "$SEED_HASH_DOCKER_ANDROID" | sha256sum | awk '{print $1}')
echo "DOCKER_IMG_CACHED_ALPINE_CORE=$DOCKER_REPO_LOCAL_ALPINE_CORE:$HASH_DOCKERFILE_ALPINE_CORE" >> $GITHUB_OUTPUT
echo "DOCKER_IMG_CACHED_LIBVCX=$DOCKER_REPO_LOCAL_LIBVCX:$HASH_DOCKER_LIBVCX" >> $GITHUB_OUTPUT
echo "DOCKER_IMG_CACHED_ANDROID=$DOCKER_REPO_LOCAL_ANDROID:$HASH_DOCKER_ANDROID" >> $GITHUB_OUTPUT
echo "DOCKER_IMG_CACHED_VDRPROXY=$DOCKER_REPO_LOCAL_VDRPROXY:$HASH_DOCKERFILE_VDRPROXY" >> $GITHUB_OUTPUT
workflow-setup-check:
runs-on: ubuntu-20.04
needs: workflow-setup
steps:
- name: "Print outputs"
run: |
echo "PUBLISH_VERSION ${{ needs.workflow-setup.outputs.PUBLISH_VERSION }}"
echo "RELEASE ${{ needs.workflow-setup.outputs.RELEASE }}"
echo "PRERELEASE ${{ needs.workflow-setup.outputs.PRERELEASE }}"
echo "BRANCH_NAME ${{ needs.workflow-setup.outputs.BRANCH_NAME }}"
echo "IS_FORK ${{ needs.workflow-setup.outputs.IS_FORK }}"
echo "SKIP_IOS ${{ needs.workflow-setup.outputs.SKIP_IOS }}"
echo "SKIP_ANDROID ${{ needs.workflow-setup.outputs.SKIP_ANDROID }}"
echo "SKIP_NAPI_M1 ${{ needs.workflow-setup.outputs.SKIP_NAPI_M1 }}"
echo "SKIP_CI ${{ needs.workflow-setup.outputs.SKIP_CI }}"
echo "DOCKER_IMG_CACHED_ALPINE_CORE ${{ needs.workflow-setup.outputs.DOCKER_IMG_CACHED_ALPINE_CORE }}"
echo "DOCKER_IMG_CACHED_LIBVCX ${{ needs.workflow-setup.outputs.DOCKER_IMG_CACHED_LIBVCX }}"
echo "DOCKER_IMG_CACHED_ANDROID ${{ needs.workflow-setup.outputs.DOCKER_IMG_CACHED_ANDROID }}"
echo "DOCKER_IMG_CACHED_VDRPROXY ${{ needs.workflow-setup.outputs.DOCKER_IMG_CACHED_VDRPROXY }}"
clippy-aries-vcx:
runs-on: ubuntu-20.04
steps:
- name: "Git checkout"
uses: actions/checkout@v3
- uses: actions-rs/toolchain@v1
with:
toolchain: 1.65.0
components: rustfmt, clippy
- name: "Install dependencies"
shell: bash
run: |
sudo apt-get update -y
sudo apt-get install -y libsodium-dev libssl-dev libzmq3-dev
- name: "Verify clippy warnings"
run: |
cd aries_vcx && cargo clippy
clippy-libvcx:
runs-on: ubuntu-20.04
steps:
- name: "Git checkout"
uses: actions/checkout@v3
- uses: actions-rs/toolchain@v1
with:
toolchain: 1.65.0
components: rustfmt, clippy
- name: "Install dependencies"
shell: bash
run: |
sudo apt-get update -y
sudo apt-get install -y libsodium-dev libssl-dev libzmq3-dev
- name: "Verify clippy warnings"
run: |
cd libvcx && cargo clippy
check-did-resolver-feature-variants:
runs-on: ubuntu-20.04
steps:
- name: "Git checkout"
uses: actions/checkout@v3
- uses: actions-rs/toolchain@v1
with:
toolchain: 1.65.0
- name: "Install dependencies"
shell: bash
run: |
sudo apt-get update -y
sudo apt-get install -y libsodium-dev libssl-dev libzmq3-dev
- name: "Verify aries_vcx compiles with different dependency feature variants"
run: |
cd did_resolver_sov
cargo check
check-aries-vcx-feature-variants:
runs-on: ubuntu-20.04
steps:
- name: "Git checkout"
uses: actions/checkout@v3
- uses: actions-rs/toolchain@v1
with:
toolchain: 1.65.0
components: rustfmt, clippy
- name: "Install dependencies"
shell: bash
run: |
sudo apt-get update -y
sudo apt-get install -y libsodium-dev libssl-dev libzmq3-dev
- name: "Verify aries_vcx compiles with different dependency feature variants"
run: |
cd aries_vcx
cargo check --no-default-features
cargo check --tests --all-features
cargo check --features vdrtools --no-default-features
cargo check --features modular_libs --no-default-features
##########################################################################################
############################## DOCKER BUILD ##########################################
build-docker-alpine-core:
needs: workflow-setup
runs-on: ubuntu-20.04
env:
DOCKER_IMG_CACHED: ${{ needs.workflow-setup.outputs.DOCKER_IMG_CACHED_ALPINE_CORE }}
BRANCH_NAME: ${{ needs.workflow-setup.outputs.BRANCH_NAME }}
steps:
- name: "Git checkout"
uses: actions/checkout@v3
- name: "Docker Login"
uses: azure/docker-login@v1
with:
login-server: ${{ env.URL_DOCKER_REGISTRY }}
username: $GITHUB_ACTOR
password: ${{ secrets.GITHUB_TOKEN }}
- name: "Build and cache image"
uses: ./.github/actions/build-image
with:
docker-img: ${{ env.DOCKER_IMG_CACHED }}
build-arg: "USER_ID=$UID"
dockerfile-path: "ci/alpine_core.dockerfile"
branch-name: ${{ env.BRANCH_NAME }}
branch-main: ${{ env.MAIN_BRANCH }}
docker-repo-local-name: ${{ env.DOCKER_REPO_LOCAL_ALPINE_CORE }}
build-docker-libvcx:
needs: [ workflow-setup, build-docker-alpine-core ]
if: ${{ needs.workflow-setup.outputs.SKIP_CI != 'true' }}
runs-on: ubuntu-20.04
env:
DOCKER_IMG_CACHED: ${{ needs.workflow-setup.outputs.DOCKER_IMG_CACHED_LIBVCX }}
DOCKER_IMG_CACHED_ALPINE_CORE: ${{ needs.workflow-setup.outputs.DOCKER_IMG_CACHED_ALPINE_CORE }}
BRANCH_NAME: ${{ needs.workflow-setup.outputs.BRANCH_NAME }}
steps:
- name: "Git checkout"
uses: actions/checkout@v3
- name: "Docker Login"
uses: azure/docker-login@v1
with:
login-server: ${{ env.URL_DOCKER_REGISTRY }}
username: $GITHUB_ACTOR
password: ${{ secrets.GITHUB_TOKEN }}
- name: "Load alpine core image"
uses: ./.github/actions/load-image
with:
docker-img: ${{ env.DOCKER_IMG_CACHED_ALPINE_CORE }}
- name: "Build and cache image"
uses: ./.github/actions/build-image
with:
docker-img: ${{ env.DOCKER_IMG_CACHED }}
build-arg: "ALPINE_CORE_IMAGE=$DOCKER_IMG_CACHED_ALPINE_CORE"
dockerfile-path: "ci/libvcx.dockerfile"
branch-name: ${{ env.BRANCH_NAME }}
branch-main: ${{ env.MAIN_BRANCH }}
docker-repo-local-name: ${{ env.DOCKER_REPO_LOCAL_LIBVCX }}
build-docker-android:
needs: workflow-setup
if: ${{ needs.workflow-setup.outputs.SKIP_CI != 'true' && needs.workflow-setup.outputs.SKIP_ANDROID != 'true'}}
runs-on: ubuntu-20.04
env:
DOCKER_IMG_CACHED: ${{needs.workflow-setup.outputs.DOCKER_IMG_CACHED_ANDROID}}
BRANCH_NAME: ${{ needs.workflow-setup.outputs.BRANCH_NAME }}
steps:
- name: "Git checkout"
uses: actions/checkout@v3
- name: "Docker Login"
uses: azure/docker-login@v1
with:
login-server: ${{ env.URL_DOCKER_REGISTRY }}
username: $GITHUB_ACTOR
password: ${{ secrets.GITHUB_TOKEN }}
- name: "Build and cache image"
uses: ./.github/actions/build-image
with:
skip-build-optimization: true # prevent pulling "main" branch image, because it's taking up lot of disk space.
docker-img: ${{ env.DOCKER_IMG_CACHED }}
dockerfile-path: "wrappers/java/ci/android.dockerfile"
branch-name: ${{ env.BRANCH_NAME }}
branch-main: ${{ env.MAIN_BRANCH }}
docker-repo-local-name: ${{ env.DOCKER_REPO_LOCAL_ANDROID }}
build-docker-vdrproxy:
needs: [ workflow-setup, build-docker-alpine-core ]
if: ${{ needs.workflow-setup.outputs.SKIP_CI != 'true' }}
runs-on: ubuntu-20.04
env:
DOCKER_IMG_CACHED_ALPINE_CORE: ${{ needs.workflow-setup.outputs.DOCKER_IMG_CACHED_ALPINE_CORE }}
DOCKER_IMG_CACHED: ${{ needs.workflow-setup.outputs.DOCKER_IMG_CACHED_VDRPROXY }}
BRANCH_NAME: ${{ needs.workflow-setup.outputs.BRANCH_NAME }}
outputs:
image-name: ${{ steps.meta.outputs.tags }}
steps:
- name: "Git checkout"
uses: actions/checkout@v3
- name: Login to GitHub Container Registry
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: "Load alpine core image"
uses: ./.github/actions/load-image
with:
docker-img: ${{ env.DOCKER_IMG_CACHED_ALPINE_CORE }}
- name: "Build and cache image"
uses: ./.github/actions/build-image
with:
docker-img: ${{ env.DOCKER_IMG_CACHED }}
dockerfile-path: "ci/vdrproxy.dockerfile"
build-arg: "ALPINE_CORE_IMAGE=$DOCKER_IMG_CACHED_ALPINE_CORE"
branch-name: ${{ env.BRANCH_NAME }}
branch-main: ${{ env.MAIN_BRANCH }}
docker-repo-local-name: ${{ env.DOCKER_REPO_LOCAL_VDRPROXY }}
##########################################################################################
############################## DOCKER PUBLISH ########################################
publish-docker-vdrproxy:
runs-on: ubuntu-20.04
needs: [ workflow-setup, build-docker-vdrproxy ]
if: ${{ needs.workflow-setup.outputs.SKIP_CI != 'true' }}
env:
DOCKER_IMG_CACHED: ${{ needs.workflow-setup.outputs.DOCKER_IMG_CACHED_VDRPROXY }}
PUBLISH_VERSION: ${{ needs.workflow-setup.outputs.PUBLISH_VERSION }}
BRANCH_NAME: ${{ needs.workflow-setup.outputs.BRANCH_NAME }}
IS_FORK: ${{ needs.workflow-setup.outputs.IS_FORK }}
steps:
- name: "Git checkout"
if: ${{ env.IS_FORK == 'false' }}
uses: actions/checkout@v3
- name: "Docker Login"
uses: azure/docker-login@v1
with:
login-server: ${{ env.URL_DOCKER_REGISTRY }}
username: $GITHUB_ACTOR
password: ${{ secrets.GITHUB_TOKEN }}
- name: "Publish versioned image"
if: ${{ env.IS_FORK == 'false' }}
uses: ./.github/actions/publish-image
with:
docker-img: ${{ env.DOCKER_IMG_CACHED }}
publish-version: ${{ env.PUBLISH_VERSION }}
publish-docker-libvcx:
runs-on: ubuntu-20.04
needs: [ workflow-setup, build-docker-libvcx ]
if: ${{ needs.workflow-setup.outputs.SKIP_CI != 'true' }}
env:
DOCKER_IMG_CACHED: ${{ needs.workflow-setup.outputs.DOCKER_IMG_CACHED_LIBVCX }}
PUBLISH_VERSION: ${{ needs.workflow-setup.outputs.PUBLISH_VERSION }}
BRANCH_NAME: ${{ needs.workflow-setup.outputs.BRANCH_NAME }}
IS_FORK: ${{ needs.workflow-setup.outputs.IS_FORK }}
steps:
- name: "Git checkout"
if: ${{ env.IS_FORK == 'false' }}
uses: actions/checkout@v3
- name: "Docker Login"
uses: azure/docker-login@v1
with:
login-server: ${{ env.URL_DOCKER_REGISTRY }}
username: $GITHUB_ACTOR
password: ${{ secrets.GITHUB_TOKEN }}
- name: "Publish versioned image"
if: ${{ env.IS_FORK == 'false' }}
uses: ./.github/actions/publish-image
with:
docker-img: ${{ env.DOCKER_IMG_CACHED }}
publish-version: ${{ env.PUBLISH_VERSION }}
# ##########################################################################################
# ############################### CODECOV ###########################################
code-coverage-aries-vcx-integration-modular-libs:
needs: workflow-setup
if: ${{ needs.workflow-setup.outputs.SKIP_CI != 'true' }}
runs-on: ubuntu-20.04
steps:
- name: "Git checkout"
uses: actions/checkout@v3
- name: "Setup rust codecov environment"
uses: ./.github/actions/setup-codecov-rust
- name: "Run workspace tests: modular libs profile"
run: |
RUSTFLAGS='-Zprofile -Ccodegen-units=1 -Cinline-threshold=0 -Clink-dead-code -Coverflow-checks=off -Cpanic=abort -Zpanic_abort_tests' \
RUSTDOCFLAGS='-Zprofile -Ccodegen-units=1 -Cinline-threshold=0 -Clink-dead-code -Coverflow-checks=off -Cpanic=abort -Zpanic_abort_tests' \
RUST_TEST_THREADS=1 CARGO_INCREMENTAL=0 TEST_POOL_IP=127.0.0.1 cargo test --package aries-vcx -F 'modular_libs' -- --ignored;
mkdir -p /tmp/artifacts/coverage
grcov ./target/debug/ -s . -t lcov --llvm --branch --ignore-not-existing -o /tmp/artifacts/coverage/coverage.lcov
- name: "Upload coverage to Codecov"
uses: codecov/codecov-action@v2
with:
directory: /tmp/artifacts/coverage
flags: unittests-aries-vcx
name: codecov-unit-aries-vcx
fail_ci_if_error: true
path_to_write_report: /tmp/artifacts/coverage/codecov_report.gz
- uses: actions/upload-artifact@v3
with:
name: code-coverage-report-unit-aries-vcx
path: /tmp/artifacts/coverage
##########################################################################################
############################### TESTING ###########################################
test-unit-workspace:
needs: workflow-setup
runs-on: ubuntu-20.04
strategy:
matrix:
features: [
"anoncreds_vdrtools",
"anoncreds_credx",
]
steps:
- name: "Git checkout"
uses: actions/checkout@v3
- name: "Setup rust testing environment"
uses: ./.github/actions/setup-testing-rust
with:
skip-docker-setup: true
- name: "Run workspace unit tests"
run: RUST_TEST_THREADS=1 cargo test --workspace --lib --exclude aries-vcx-agent --exclude libvdrtools --exclude wallet_migrator --features ${{ matrix.features }}
test-integration-aries-vcx:
needs: workflow-setup
runs-on: ubuntu-20.04
strategy:
matrix:
features: [
"vdrtools",
"modular_libs"
]
steps:
- name: "Git checkout"
uses: actions/checkout@v3
- name: "Setup rust testing environment"
uses: ./.github/actions/setup-testing-rust
- name: "Run aries-vcx integration tests"
run: RUST_TEST_THREADS=1 cargo test --manifest-path="aries_vcx/Cargo.toml" --features ${{ matrix.features }} -- --ignored;
test-integration-aries-vcx-mysql:
needs: workflow-setup
runs-on: ubuntu-20.04
steps:
- name: "Git checkout"
uses: actions/checkout@v3
- name: "Setup rust testing environment"
uses: ./.github/actions/setup-testing-rust
- name: "Run aries-vcx tests: mysql_test"
run: RUST_TEST_THREADS=1 cargo test --manifest-path="aries_vcx/Cargo.toml" test_mysql -- --include-ignored;
# TODO: restore after PRs are merged into indy-vdrproxy
# test-integration-aries-vcx-vdrproxy:
# needs: [workflow-setup, build-docker-vdrproxy]
# runs-on: ubuntu-20.04
# env:
# RUST_TEST_THREADS: 1
# VDR_PROXY_CLIENT_URL: http://127.0.0.1:3030
# DOCKER_IMAGE_VDRPROXY: ${{ needs.workflow-setup.outputs.DOCKER_IMG_CACHED_VDRPROXY }}
# GENESIS_URL: https://raw.githubusercontent.com/AbsaOSS/sovrin-networks/master/genesis/127.0.0.1
# VDR_PROXY_PORT: 3030
# steps:
# - name: "Git checkout"
# uses: actions/checkout@v3
# - name: "Load android image"
# uses: ./.github/actions/load-image
# with:
# docker-img: ${{ env.DOCKER_IMAGE_VDRPROXY }}
# - name: "Setup rust testing environment"
# uses: ./.github/actions/setup-testing-rust
# with:
# skip-vdrproxy-setup: false
# - name: "Run aries-vcx tests: vdrproxy_test"
# run: RUST_TEST_THREADS=1 cargo test --manifest-path="aries_vcx/Cargo.toml" -F vdr_proxy_ledger -- --ignored
# - name: "Collect docker logs on failure"
# if: failure()
# uses: ./.github/actions/upload-docker-logs
# with:
# name: "docker-services-${{ github.job }}"
test-integration-aries-vcx-migration:
needs: workflow-setup
runs-on: ubuntu-20.04
steps:
- name: "Git checkout"
uses: actions/checkout@v3
- name: "Setup rust testing environment"
uses: ./.github/actions/setup-testing-rust
- name: "Run aries-vcx tests: pool_tests agency_pool_tests"
run: |
cargo test --manifest-path="wallet_migrator/Cargo.toml";
RUST_TEST_THREADS=1 CARGO_INCREMENTAL=0 TEST_POOL_IP=127.0.0.1 cargo test --manifest-path="aries_vcx/Cargo.toml" -F migration --test test_creds_proofs -- --include-ignored;
RUST_TEST_THREADS=1 CARGO_INCREMENTAL=0 TEST_POOL_IP=127.0.0.1 cargo test --manifest-path="aries_vcx/Cargo.toml" -F migration --test test_creds_proofs_revocations -- --include-ignored;
test-integration-libvcx:
needs: workflow-setup
if: ${{ needs.workflow-setup.outputs.SKIP_CI != 'true' }}
runs-on: ubuntu-20.04
strategy:
matrix:
features: [
"anoncreds_vdrtools",
"anoncreds_credx"
]
steps:
- name: "Git checkout"
uses: actions/checkout@v3
- name: "Setup rust testing environment"
uses: ./.github/actions/setup-testing-rust
- name: "Run libvcx_core integration tests"
run: |
RUST_TEST_THREADS=1 cargo test --features ${{ matrix.features }} --manifest-path="libvcx_core/Cargo.toml" -- --include-ignored;
test-integration-libvcx-c:
needs: workflow-setup
if: ${{ needs.workflow-setup.outputs.SKIP_CI != 'true' }}
runs-on: ubuntu-20.04
strategy:
matrix:
features: [
"anoncreds_vdrtools",
"anoncreds_credx"
]
steps:
- name: "Git checkout"
uses: actions/checkout@v3
- name: "Setup rust testing environment"
uses: ./.github/actions/setup-testing-rust
- name: "Run libvcx unit tests"
run: |
RUST_TEST_THREADS=1 cargo test --features ${{ matrix.features }} --manifest-path="libvcx/Cargo.toml";
test-integration-resolver:
needs: workflow-setup
if: ${{ needs.workflow-setup.outputs.SKIP_CI != 'true' }}
runs-on: ubuntu-20.04
steps:
- name: "Git checkout"
uses: actions/checkout@v3
- name: "Setup rust testing environment"
uses: ./.github/actions/setup-testing-rust
- name: "Run resolver tests"
run: |
RUST_TEST_THREADS=1 cargo test -p did_doc -p did_parser -p did_resolver -p did_resolver_registry -p did_resolver_sov -p did_resolver_web --test "*"
test-node-wrapper:
needs: workflow-setup
if: ${{ needs.workflow-setup.outputs.SKIP_CI != 'true' }}
runs-on: ubuntu-22.04
strategy:
matrix:
node-version: [18.x]
steps:
- name: "Git checkout"
uses: actions/checkout@v3
- name: "Setup NodeJS libvcx testing environment"
uses: ./.github/actions/setup-testing-nodejs
with:
skip-docker-setup: true
node-version: ${{ matrix.node-version }}
- name: "Run tests"
run: cd wrappers/node && npm run test
test-integration-node-wrapper:
needs: workflow-setup
if: ${{ needs.workflow-setup.outputs.SKIP_CI != 'true' }}
runs-on: ubuntu-22.04
strategy:
matrix:
node-version: [18.x]
steps:
- name: "Git checkout"
uses: actions/checkout@v3
- name: "Setup NodeJS libvcx testing environment"
uses: ./.github/actions/setup-testing-nodejs
with:
node-version: ${{ matrix.node-version }}
- name: "Run wrapper integration tests"
run: (cd wrappers/node && npm run test:integration)
- name: "Install vcxagent-core dependencies"
run: (cd agents/node/vcxagent-core && npm install)
- name: "Run demo"
run: (cd agents/node/vcxagent-core && AGENCY_URL=http://localhost:8080 npm run demo)
- name: "Run demo with revocation"
run: (cd agents/node/vcxagent-core && AGENCY_URL=http://localhost:8080 npm run demo:revocation)
- name: "Run integration tests"
run: (cd agents/node/vcxagent-core && AGENCY_URL=http://localhost:8080 npm run test:integration)
# Issue addressing the jobs below being commented out: https://github.com/hyperledger/aries-vcx/issues/916
# test-android-build:
# runs-on: ubuntu-20.04
# needs: [ workflow-setup, build-docker-android ]
# if: ${{ needs.workflow-setup.outputs.SKIP_CI != 'true' && needs.workflow-setup.outputs.SKIP_ANDROID != 'true' }}
# env:
# DOCKER_IMG_CACHED_ANDROID: ${{needs.workflow-setup.outputs.DOCKER_IMG_CACHED_ANDROID}}
# steps:
# - name: "Git checkout"
# uses: actions/checkout@v3
# - name: "Docker Login"
# uses: azure/docker-login@v1
# with:
# login-server: ${{ env.URL_DOCKER_REGISTRY }}
# username: $GITHUB_ACTOR
# password: ${{ secrets.GITHUB_TOKEN }}
# - name: "Load android image"
# uses: ./.github/actions/load-image
# with:
# docker-img: ${{ env.DOCKER_IMG_CACHED_ANDROID }}
# - name: "Run android tests"
# run: |
# rm -rf /tmp/imgcache
# docker run --rm -i $DOCKER_IMG_CACHED_ANDROID \
# sh -c '(cd $HOME/aries-vcx && ./wrappers/java/ci/android.test.sh armv7)'
# build-and-publish-ios-wrapper:
# needs: workflow-setup
# if: ${{ needs.workflow-setup.outputs.SKIP_CI != 'true' && needs.workflow-setup.outputs.SKIP_IOS != 'true' }}
# runs-on: macos-11
# env:
# LIBVCX_VERSION: ${{ needs.workflow-setup.outputs.PUBLISH_VERSION }}
# PUBLISH_VERSION: ${{ needs.workflow-setup.outputs.PUBLISH_VERSION }}
# steps:
# - name: "Git checkout"
# uses: actions/checkout@v2
# - name: Switch to xcode version 12.4
# run: |
# sudo xcode-select --switch /Applications/Xcode_12.4.app/Contents/Developer
# xcodebuild -version
# - name: "Build iOS wrapper"
# run: |
# ./wrappers/ios/ci/build.sh
# - uses: actions/upload-artifact@v3
# with:
# name: libvcx-ios-${{ env.PUBLISH_VERSION }}-device
# path: /tmp/artifacts/libvcx-ios-${{ env.PUBLISH_VERSION }}-device.zip
# - uses: actions/upload-artifact@v3
# with:
# name: libvcx-ios-${{ env.PUBLISH_VERSION }}-universal
# path: /tmp/artifacts/libvcx-ios-${{ env.PUBLISH_VERSION }}-universal.zip
# build-and-publish-android-device:
# runs-on: ubuntu-20.04
# needs: [ workflow-setup, build-docker-android ]
# if: ${{ needs.workflow-setup.outputs.SKIP_CI != 'true' && needs.workflow-setup.outputs.SKIP_ANDROID != 'true' }}
# env:
# FULL_VERSION_NAME: libvcx-android-${{needs.workflow-setup.outputs.PUBLISH_VERSION}}-device
# DOCKER_IMG_CACHED_ANDROID: ${{ needs.workflow-setup.outputs.DOCKER_IMG_CACHED_ANDROID }}
# steps:
# - name: "Git checkout"
# uses: actions/checkout@v3
# - name: "Docker Login"
# uses: azure/docker-login@v1
# with:
# login-server: ${{ env.URL_DOCKER_REGISTRY }}
# username: $GITHUB_ACTOR
# password: ${{ secrets.GITHUB_TOKEN }}
# - name: "Load android image"
# uses: ./.github/actions/load-image
# with:
# docker-img: ${{ env.DOCKER_IMG_CACHED_ANDROID }}
# - name: "Build, run android wrapper tests, and publish artifacts"
# uses: ./.github/actions/publish-android
# with:
# abis: "arm arm64"
# docker-img-name: ${{ needs.workflow-setup.outputs.DOCKER_IMG_CACHED_ANDROID }}
# full-version-name: ${{ env.FULL_VERSION_NAME }}
# - name: "Publish aar artifact"
# uses: actions/upload-artifact@v3
# with:
# name: ${{ env.FULL_VERSION_NAME }}
# path: /tmp/artifacts/aar/${{ env.FULL_VERSION_NAME }}.aar
#
# build-and-publish-android-emulator:
# runs-on: ubuntu-20.04
# needs: [ workflow-setup, build-docker-android ]
# if: ${{ needs.workflow-setup.outputs.SKIP_CI != 'true' && needs.workflow-setup.outputs.SKIP_ANDROID != 'true' }}
# env:
# FULL_VERSION_NAME: libvcx-android-${{needs.workflow-setup.outputs.PUBLISH_VERSION}}-emulator
# DOCKER_IMG_CACHED_ANDROID: ${{ needs.workflow-setup.outputs.DOCKER_IMG_CACHED_ANDROID }}
# steps:
# - name: "Git checkout"
# uses: actions/checkout@v3
# - name: "Docker Login"
# uses: azure/docker-login@v1
# with:
# login-server: ${{ env.URL_DOCKER_REGISTRY }}
# username: $GITHUB_ACTOR
# password: ${{ secrets.GITHUB_TOKEN }}
# - name: "Load android image"
# uses: ./.github/actions/load-image
# with:
# docker-img: ${{ env.DOCKER_IMG_CACHED_ANDROID }}
# - name: "Build, run android wrapper tests, and publish artifacts"
# uses: ./.github/actions/publish-android
# with:
# abis: "x86 x86_64"
# docker-img-name: ${{ needs.workflow-setup.outputs.DOCKER_IMG_CACHED_ANDROID }}
# full-version-name: ${{ env.FULL_VERSION_NAME }}
# - uses: actions/upload-artifact@v3
# with:
# name: ${{ env.FULL_VERSION_NAME }}
# path: /tmp/artifacts/aar/${{ env.FULL_VERSION_NAME }}.aar
build-and-publish-ubuntu-lib:
needs: workflow-setup
if: ${{ needs.workflow-setup.outputs.SKIP_CI != 'true' }}
runs-on: ubuntu-20.04
steps:
- name: "Git checkout"
uses: actions/checkout@v3
- uses: actions-rs/toolchain@v1
with:
toolchain: 1.65.0
- uses: Swatinem/rust-cache@v2
with:
key: "11"
- name: "Install dependencies"
shell: bash
run: |
sudo apt-get update -y
sudo apt-get install -y libsodium-dev libssl-dev libzmq3-dev
- name: "Build libvcx.so"
run: cargo build --release
- name: "Publish artifact libvcx.so"
uses: actions/upload-artifact@v3
with:
name: libvcx.so
path: target/release/libvcx.so
build-and-publish-darwin-lib:
needs: workflow-setup
if: ${{ needs.workflow-setup.outputs.SKIP_CI != 'true' }}
runs-on: macos-11
steps:
- name: "Git checkout"
uses: actions/checkout@v3
- uses: actions-rs/toolchain@v1
with:
toolchain: 1.65.0
- uses: Swatinem/rust-cache@v2
with:
key: "11"
- name: "Install dependencies"
shell: bash
run: |
brew install openssl
brew install zeromq
brew install libsodium
brew install pkg-config
- name: "Build libvcx.dylib"
run: cargo build --release
- name: "Publish artifact libvcx.dylib"
uses: actions/upload-artifact@v3
with:
name: libvcx.dylib
path: target/release/libvcx.dylib
##########################################################################################
############################ NPMJS PUBLISHING #######################################
publish-node-wrapper:
runs-on: ubuntu-20.04
needs:
- workflow-setup
- publish-napi
if: ${{ needs.workflow-setup.outputs.SKIP_CI != 'true' }}
env:
PUBLISH_VERSION: ${{needs.workflow-setup.outputs.PUBLISH_VERSION}}
steps:
- name: "Git checkout"
uses: actions/checkout@v3
- name: "Use Node.js 18"
uses: actions/setup-node@v3
with:
node-version: ${{ env.NODE_VERSION }}
- name: "Publish package"
run: |
if [[ "$PUBLISH_VERSION" ]]
then
NPMJS_TOKEN=${{ secrets.NPMJS_TOKEN }} PUBLISH_VERSION=${{ env.PUBLISH_VERSION }} ./wrappers/node/publish.sh
else
echo "New version was not defined, skipping release."
fi
publish-agent-core:
runs-on: ubuntu-20.04
needs:
- workflow-setup
- publish-node-wrapper
if: ${{ needs.workflow-setup.outputs.SKIP_CI != 'true' }}
env:
NPMJS_TOKEN: ${{ secrets.NPMJS_TOKEN }}
PUBLISH_VERSION: ${{needs.workflow-setup.outputs.PUBLISH_VERSION}}
steps:
- name: "Git checkout"
uses: actions/checkout@v3
- name: "Use Node.js 18"
uses: actions/setup-node@v3
with:
node-version: ${{ env.NODE_VERSION }}
- name: "Release agent-core package"
run: |
if [[ "$PUBLISH_VERSION" ]]
then
NPMJS_TOKEN=${{ secrets.NPMJS_TOKEN }} PUBLISH_VERSION=${{ env.PUBLISH_VERSION }} ./agents/node/vcxagent-core/publish.sh
else
echo "New version was not defined, skipping release."
fi
build-napi:
needs:
- workflow-setup
if: ${{ needs.workflow-setup.outputs.SKIP_CI != 'true' }}
strategy:
fail-fast: false
matrix:
settings:
- host: ubuntu-20.04
target: x86_64-unknown-linux-gnu
build: |-
set -e
sudo apt-get update -y
sudo apt-get install -y libssl-dev libzmq3-dev
npm run build:napi
strip *.node
- host: ubuntu-20.04
target: x86_64-unknown-linux-musl
docker: ghcr.io/hyperledger/aries-vcx/napi-rs-alpine
build: |-
set -e
env
unset CC
unset CXX
cd wrappers/vcx-napi-rs
npm run build:napi
strip *.node
- host: macos-latest
target: x86_64-apple-darwin
build: |
brew install openssl zmq pkg-config
npm run build:napi
strip -x *.node
- host: macos-latest
target: aarch64-apple-darwin
skip: ${{ needs.workflow-setup.outputs.SKIP_NAPI_M1 }}
build: |
wget https://github.com/macports/macports-base/releases/download/v2.8.0/MacPorts-2.8.0-12-Monterey.pkg
sudo installer -pkg ./MacPorts-2.8.0-12-Monterey.pkg -target /
export PATH=/opt/local/bin:/opt/local/sbin:$PATH
sudo port install openssl +universal zmq +universal
export OPENSSL_DIR=/opt/local
export OPENSSL_INCLUDE_DIR=/opt/local/include/
export OPENSSL_LIB_DIR=/opt/local/lib/
export SODIUM_LIB_DIR=/opt/local/lib/
export SODIUM_INCLUDE_DIR=/opt/local/include
export LIBZMQ_LIB_DIR=/opt/local/lib/
export LIBZMQ_INCLUDE_DIR=/opt/local/include
export PKG_CONFIG_ALLOW_CROSS=1
export PKG_CONFIG_SYSROOT_DIR=/
export RUST_BACKTRACE=1
npm run build:napi -- --target aarch64-apple-darwin
strip -x *.node
name: ${{ matrix.settings.target }}
runs-on: ${{ matrix.settings.host }}
steps:
- uses: actions/checkout@v3
- uses: ./.github/actions/build-napi
if: ${{ matrix.settings.skip != 'true' }}
with:
docker: ${{ matrix.settings.docker }}
target: ${{ matrix.settings.target }}
build: ${{ matrix.settings.build }}
node-version: ${{ env.NODE_VERSION }}
rust-version: ${{ env.RUST_TOOLCHAIN_VERSON }}
publish-napi:
runs-on: ubuntu-20.04
needs:
- workflow-setup
- test-unit-workspace
- test-integration-libvcx
- test-integration-aries-vcx
- test-integration-aries-vcx-mysql
- test-node-wrapper
- test-integration-node-wrapper
- workflow-setup
- build-napi
if: ${{ needs.workflow-setup.outputs.SKIP_CI != 'true' && needs.workflow-setup.outputs.IS_FORK == 'false' }}
steps:
- uses: actions/checkout@v3
- uses: ./.github/actions/publish-napi
with:
publish-version: ${{ needs.workflow-setup.outputs.PUBLISH_VERSION }}
npmjs-token: ${{ secrets.NPMJS_TOKEN }}
node-version: ${{ env.NODE_VERSION }}
##########################################################################################
############################## RELEASE #########################################
make-release:
runs-on: ubuntu-20.04
needs:
- workflow-setup
# - build-and-publish-ios-wrapper
# - build-and-publish-android-device
# - build-and-publish-android-emulator
- test-unit-workspace
- test-integration-libvcx
- test-integration-aries-vcx
- test-integration-aries-vcx-mysql
# - test-android-build
- test-node-wrapper
- test-integration-node-wrapper
if: ${{ needs.workflow-setup.outputs.RELEASE == 'true' || needs.workflow-setup.outputs.PRERELEASE == 'true' }}
outputs:
RELEASE_UPLOAD_URL: ${{ steps.create-release.outputs.upload_url }}
steps:
- name: "Git checkout"
uses: actions/checkout@v2
- name: "Generate changelog"
uses: heinrichreimer/[email protected]
with:
token: ${{ secrets.GITHUB_TOKEN }}
futureRelease: ${{ needs.workflow-setup.outputs.PUBLISH_VERSION }}
releaseBranch: main
pullRequests: true
unreleased: false
unreleasedOnly: false
issuesWoLabels: true
prWoLabels: true
stripGeneratorNotice: true
stripHeaders: false
maxIssues: 50
excludeLabels: duplicate,question,invalid,wontfix,changelog-excluded
breakingLabels: backwards-incompatible,breaking
deprecatedLabels: deprecated
headerLabel: "# Changelog"
breakingLabel: '### Breaking changes'
enhancementLabel: '### Enhancements'
bugsLabel: '### Bug fixes'
deprecatedLabel: '### Deprecations'
removedLabel: '### Removals'
securityLabel: '### Security fixes'
issuesLabel: '### Other issues'
prLabel: '### Other pull requests'
addSections: '{"ci":{"prefix":"### CI changes","labels":["ci"]},"wrappers":{"prefix":"### Wrapper changes","labels":["wrappers"]},"agents":{"prefix":"### Changes to agents","labels":["agents"]},"features":{"prefix":"### Features","labels":["features"]},"hotfix":{"prefix":"### Hotfixes","labels":["hotfix"]},"security":{"prefix":"### Security fixes","labels":["security"]},"refactoring":{"prefix":"### Refactoring","labels":["refactoring"]},"tests":{"prefix":"### Tests","labels":["tests"]},"update":{"prefix":"### Updates","labels":["update"]}}'
excludeTagsRegex: '^((([0-9]+)\.([0-9]+)\.([0-9]+)(?:-([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))+)?)$'
- name: "Create a new release"
id: create-release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ needs.workflow-setup.outputs.PUBLISH_VERSION }}
release_name: Release ${{ needs.workflow-setup.outputs.PUBLISH_VERSION }}
body_path: ./CHANGELOG.md
draft: ${{ needs.workflow-setup.outputs.PRERELEASE == 'true' }}
prerelease: ${{ needs.workflow-setup.outputs.PRERELEASE == 'true' }}
# release-android-device:
# runs-on: ubuntu-20.04
# needs: [ workflow-setup, make-release ]
# if: ${{ needs.workflow-setup.outputs.SKIP_CI != 'true' }}
# steps:
# - name: "Fetch android device build from artifacts"
# uses: actions/download-artifact@v2
# with:
# name: libvcx-android-${{ needs.workflow-setup.outputs.PUBLISH_VERSION }}-device
# - name: "Upload release assets"
# uses: actions/upload-release-asset@v1
# env:
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# with:
# upload_url: ${{ needs.make-release.outputs.RELEASE_UPLOAD_URL }}
# asset_path: ./libvcx-android-${{ needs.workflow-setup.outputs.PUBLISH_VERSION }}-device.aar
# asset_name: libvcx-android-${{ needs.workflow-setup.outputs.PUBLISH_VERSION }}-device.aar
# asset_content_type: application/aar
#
# release-android-emulator:
# runs-on: ubuntu-20.04
# needs: [ workflow-setup, make-release ]
# if: ${{ needs.workflow-setup.outputs.SKIP_CI != 'true' }}
# steps:
# - name: "Fetch android emulator build from artifacts"
# uses: actions/download-artifact@v2
# with:
# name: libvcx-android-${{ needs.workflow-setup.outputs.PUBLISH_VERSION }}-emulator
# - name: "Upload release assets"
# uses: actions/upload-release-asset@v1
# env:
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# with:
# upload_url: ${{ needs.make-release.outputs.RELEASE_UPLOAD_URL }}
# asset_path: ./libvcx-android-${{ needs.workflow-setup.outputs.PUBLISH_VERSION }}-emulator.aar
# asset_name: libvcx-android-${{ needs.workflow-setup.outputs.PUBLISH_VERSION }}-emulator.aar
# asset_content_type: application/aar
# release-ios-device:
# runs-on: ubuntu-20.04
# needs: [ workflow-setup, make-release ]
# if: ${{ needs.workflow-setup.outputs.SKIP_CI != 'true' }}
# steps:
# - name: "Fetch iOS device build from artifacts"
# uses: actions/download-artifact@v2
# with:
# name: libvcx-ios-${{ needs.workflow-setup.outputs.PUBLISH_VERSION }}-device
# - name: "Upload release assets"
# uses: actions/upload-release-asset@v1
# env:
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# with:
# upload_url: ${{ needs.make-release.outputs.RELEASE_UPLOAD_URL }}
# asset_path: ./libvcx-ios-${{ needs.workflow-setup.outputs.PUBLISH_VERSION }}-device.zip
# asset_name: libvcx-ios-${{ needs.workflow-setup.outputs.PUBLISH_VERSION }}-device.zip
# asset_content_type: application/zip
#
# release-ios-universal:
# runs-on: ubuntu-20.04
# needs: [ workflow-setup, make-release ]
# if: ${{ needs.workflow-setup.outputs.SKIP_CI != 'true' }}
# steps:
# - name: "Fetch iOS universal build from artifacts"
# uses: actions/download-artifact@v2
# with:
# name: libvcx-ios-${{ needs.workflow-setup.outputs.PUBLISH_VERSION }}-universal
# - name: "Upload release assets"
# uses: actions/upload-release-asset@v1
# env:
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# with:
# upload_url: ${{ needs.make-release.outputs.RELEASE_UPLOAD_URL }}
# asset_path: ./libvcx-ios-${{ needs.workflow-setup.outputs.PUBLISH_VERSION }}-universal.zip
# asset_name: libvcx-ios-${{ needs.workflow-setup.outputs.PUBLISH_VERSION }}-universal.zip
# asset_content_type: application/zip