Skip to content

Interoperability Report #972

Interoperability Report

Interoperability Report #972

name: Interoperability Report
on:
workflow_dispatch:
schedule:
# Every day at midnight
- cron: '0 0 * * *'
jobs:
interop-did-web-discovery:
name: DID Web Discovery
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- name: 'Mavennet'
actor: 'MAVENNET_STAGING'
- name: 'mesur.io'
actor: 'MESUR_IO_PRODUCTION'
- name: 'GS1US'
actor: 'GS1US'
- name: 'BCGov'
actor: 'BCGOV'
steps:
# Check out repo, setup node, and install dependencies.
# @see https://github.com/actions/setup-node#usage
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 16.15.1
cache: 'npm'
- run: npm ci
- name: Run Tests
env:
organization_did_web: ${{secrets[format('{0}_ORGANIZATION_DID_WEB', matrix.actor)]}}
client_id: ${{secrets[format('{0}_CLIENT_ID', matrix.actor)]}}
client_secret: ${{secrets[format('{0}_CLIENT_SECRET', matrix.actor)]}}
client_scope: ${{secrets[format('{0}_CLIENT_SCOPE', matrix.actor)]}}
token_audience: ${{secrets[format('{0}_TOKEN_AUDIENCE', matrix.actor)]}}
token_endpoint: ${{secrets[format('{0}_TOKEN_ENDPOINT', matrix.actor)]}}
api_base_url: ${{secrets[format('{0}_API_BASE_URL', matrix.actor)]}}
run: |
npx newman run ./docs/tutorials/did-web-discovery/did-web-discovery.postman_collection.json \
--env-var ORGANIZATION_DID_WEB=$organization_did_web \
--env-var CLIENT_ID=$client_id \
--env-var CLIENT_SECRET=$client_secret \
--env-var CLIENT_SCOPE=$client_scope \
--env-var TOKEN_AUDIENCE=$token_audience \
--env-var TOKEN_ENDPOINT=$token_endpoint \
--env-var API_BASE_URL=$api_base_url \
--reporters cli,htmlextra,json \
--reporter-htmlextra-skipSensitiveData \
--reporter-htmlextra-export "newman/${{format('{0}-{1}-{2}.html', github.run_id, github.job, matrix.name)}}" \
--reporter-json-export "newman/${{format('{0}-{1}-{2}.json', github.run_id, github.job, matrix.name)}}"
# Write sanitized Newman output to `./docs/reports`.
- name: Sanitize Report Output
if: always() # Run even when postman tests fail
run: npm run report:sanitize
# Sanitized reports are needed by subsequent jobs
- uses: actions/upload-artifact@v3
if: always() # Run even when postman tests fail
with:
name: reports
path: docs/reports/
interop-presentations-exchange-oauth:
name: Presentations Exchange OAuth
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- name: 'mesur.io-Mavennet'
holder: MESUR_IO_PRODUCTION
verifier: MAVENNET_STAGING
- name: 'mesur.io-GS1US'
holder: MESUR_IO_PRODUCTION
verifier: GS1US
- name: 'mesur.io-BCGov'
holder: MESUR_IO_PRODUCTION
verifier: BCGOV
- name: 'Mavennet-mesur.io'
holder: MAVENNET_STAGING
verifier: MESUR_IO_PRODUCTION
- name: 'Mavennet-GS1US'
holder: MAVENNET_STAGING
verifier: GS1US
- name: 'Mavennet-BCGov'
holder: MAVENNET_STAGING
verifier: BCGOV
- name: 'GS1US-mesur.io'
holder: GS1US
verifier: MESUR_IO_PRODUCTION
- name: 'GS1US-BCGov'
holder: GS1US
verifier: BCGOV
- name: 'BCGov-mesur.io'
holder: BCGOV
verifier: MESUR_IO_PRODUCTION
- name: 'BCGov-Mavennet'
holder: BCGOV
verifier: MAVENNET_STAGING
- name: 'BCGov-GS1US'
holder: BCGOV
verifier: GS1US
steps:
# Check out repo, setup node, and install dependencies.
# @see https://github.com/actions/setup-node#usage
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 16.15.1
cache: 'npm'
- run: npm ci
- name: Run Tests
env:
holder_organization_did_web: ${{secrets[format('{0}_ORGANIZATION_DID_WEB', matrix.holder)]}}
holder_client_id: ${{secrets[format('{0}_CLIENT_ID', matrix.holder)]}}
holder_client_secret: ${{secrets[format('{0}_CLIENT_SECRET', matrix.holder)]}}
holder_client_scope: ${{secrets[format('{0}_CLIENT_SCOPE', matrix.actor)]}}
holder_token_audience: ${{secrets[format('{0}_TOKEN_AUDIENCE', matrix.holder)]}}
holder_token_endpoint: ${{secrets[format('{0}_TOKEN_ENDPOINT', matrix.holder)]}}
holder_api_base_url: ${{secrets[format('{0}_API_BASE_URL', matrix.holder)]}}
verifier_organization_did_web: ${{secrets[format('{0}_ORGANIZATION_DID_WEB', matrix.verifier)]}}
verifier_client_id: ${{secrets[format('{0}_CLIENT_ID', matrix.verifier)]}}
verifier_client_secret: ${{secrets[format('{0}_CLIENT_SECRET', matrix.verifier)]}}
verifier_client_scope: ${{secrets[format('{0}_CLIENT_SCOPE', matrix.actor)]}}
verifier_token_audience: ${{secrets[format('{0}_TOKEN_AUDIENCE', matrix.verifier)]}}
verifier_token_endpoint: ${{secrets[format('{0}_TOKEN_ENDPOINT', matrix.verifier)]}}
verifier_api_base_url: ${{secrets[format('{0}_API_BASE_URL', matrix.verifier)]}}
run: |
npx newman run ./docs/tutorials/presentations-exchange-oauth/presentations-exchange-oauth.json \
--env-var HOLDER_ORGANIZATION_DID_WEB=$holder_organization_did_web \
--env-var HOLDER_CLIENT_ID=$holder_client_id \
--env-var HOLDER_CLIENT_SECRET=$holder_client_secret \
--env-var HOLDER_CLIENT_SCOPE=$holder_client_scope \
--env-var HOLDER_TOKEN_AUDIENCE=$holder_token_audience \
--env-var HOLDER_TOKEN_ENDPOINT=$holder_token_endpoint \
--env-var HOLDER_API_BASE_URL=$holder_api_base_url \
--env-var VERIFIER_ORGANIZATION_DID_WEB=$verifier_organization_did_web \
--env-var VERIFIER_CLIENT_ID=$verifier_client_id \
--env-var VERIFIER_CLIENT_SECRET=$verifier_client_secret \
--env-var VERIFIER_CLIENT_SCOPE=$verifier_client_scope \
--env-var VERIFIER_TOKEN_AUDIENCE=$verifier_token_audience \
--env-var VERIFIER_TOKEN_ENDPOINT=$verifier_token_endpoint \
--env-var VERIFIER_API_BASE_URL=$verifier_api_base_url \
--reporters cli,htmlextra,json \
--reporter-htmlextra-skipSensitiveData \
--reporter-htmlextra-export "newman/${{format('{0}-{1}-{2}.html', github.run_id, github.job, matrix.name)}}" \
--reporter-json-export "newman/${{format('{0}-{1}-{2}.json', github.run_id, github.job, matrix.name)}}"
# Write sanitized Newman output to `./docs/reports`.
- name: Sanitize Report Output
if: always() # Run even when postman tests fail
run: npm run report:sanitize
# Sanitized reports are needed by subsequent jobs
- uses: actions/upload-artifact@v3
if: always() # Run even when postman tests fail
with:
name: reports
path: docs/reports/
traceable-presentation-workflow:
name: Traceable Presentation Workflow
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- name: 'Mavennet'
actor: 'MAVENNET_STAGING'
- name: 'mesur.io'
actor: 'MESUR_IO_PRODUCTION'
- name: 'GS1US'
actor: 'GS1US'
- name: 'BCGov'
actor: 'BCGOV'
steps:
# Check out repo, setup node, and install dependencies.
# @see https://github.com/actions/setup-node#usage
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 16.15.1
cache: 'npm'
- run: npm ci
- name: Run Tests
env:
organization_did_web: ${{secrets[format('{0}_ORGANIZATION_DID_WEB', matrix.actor)]}}
client_id: ${{secrets[format('{0}_CLIENT_ID', matrix.actor)]}}
client_secret: ${{secrets[format('{0}_CLIENT_SECRET', matrix.actor)]}}
client_scope: ${{secrets[format('{0}_CLIENT_SCOPE', matrix.actor)]}}
token_audience: ${{secrets[format('{0}_TOKEN_AUDIENCE', matrix.actor)]}}
token_endpoint: ${{secrets[format('{0}_TOKEN_ENDPOINT', matrix.actor)]}}
api_base_url: ${{secrets[format('{0}_API_BASE_URL', matrix.actor)]}}
run: |
npx newman run ./docs/tutorials/traceable-presentation-workflow/traceable-presentation-workflow.postman_collection.json \
--env-var ORGANIZATION_DID_WEB=$organization_did_web \
--env-var CLIENT_ID=$client_id \
--env-var CLIENT_SECRET=$client_secret \
--env-var CLIENT_SCOPE=$client_scope \
--env-var TOKEN_AUDIENCE=$token_audience \
--env-var TOKEN_ENDPOINT=$token_endpoint \
--env-var API_BASE_URL=$api_base_url \
--reporters cli,htmlextra,json \
--reporter-htmlextra-skipSensitiveData \
--reporter-htmlextra-export "newman/${{format('{0}-{1}-{2}.html', github.run_id, github.job, matrix.name)}}" \
--reporter-json-export "newman/${{format('{0}-{1}-{2}.json', github.run_id, github.job, matrix.name)}}"
# Write sanitized Newman output to `./docs/reports`.
- name: Sanitize Report Output
if: always() # Run even when postman tests fail
run: npm run report:sanitize
# Sanitized reports are needed by subsequent jobs
- uses: actions/upload-artifact@v3
if: always() # Run even when postman tests fail
with:
name: reports
path: docs/reports/
interop-credentials-revocation:
name: Revoke Credential
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- name: 'Mavennet'
actor: 'MAVENNET_STAGING'
- name: 'mesur.io'
actor: 'MESUR_IO_PRODUCTION'
- name: 'GS1US'
actor: 'GS1US'
- name: 'BCGov'
actor: 'BCGOV'
steps:
# Check out repo, setup node, and install dependencies.
# @see https://github.com/actions/setup-node#usage
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 16.15.1
cache: 'npm'
- run: npm ci
- name: Run Tests
env:
organization_did_web: ${{secrets[format('{0}_ORGANIZATION_DID_WEB', matrix.actor)]}}
client_id: ${{secrets[format('{0}_CLIENT_ID', matrix.actor)]}}
client_secret: ${{secrets[format('{0}_CLIENT_SECRET', matrix.actor)]}}
client_scope: ${{secrets[format('{0}_CLIENT_SCOPE', matrix.actor)]}}
token_audience: ${{secrets[format('{0}_TOKEN_AUDIENCE', matrix.actor)]}}
token_endpoint: ${{secrets[format('{0}_TOKEN_ENDPOINT', matrix.actor)]}}
api_base_url: ${{secrets[format('{0}_API_BASE_URL', matrix.actor)]}}
run: |
npx newman run ./docs/tutorials/credentials-status-update/credentials-status-update.postman_collection.json \
--env-var ORGANIZATION_DID_WEB=$organization_did_web \
--env-var CLIENT_ID=$client_id \
--env-var CLIENT_SECRET=$client_secret \
--env-var CLIENT_SCOPE=$client_scope \
--env-var TOKEN_AUDIENCE=$token_audience \
--env-var TOKEN_ENDPOINT=$token_endpoint \
--env-var API_BASE_URL=$api_base_url \
--reporters cli,htmlextra,json \
--reporter-htmlextra-skipSensitiveData \
--reporter-htmlextra-export "newman/${{format('{0}-{1}-{2}.html', github.run_id, github.job, matrix.name)}}" \
--reporter-json-export "newman/${{format('{0}-{1}-{2}.json', github.run_id, github.job, matrix.name)}}"
# Write sanitized Newman output to `./docs/reports`.
- name: Sanitize Report Output
if: always() # Run even when postman tests fail
run: npm run report:sanitize
# Sanitized reports are needed by subsequent jobs
- uses: actions/upload-artifact@v3
if: always() # Run even when postman tests fail
with:
name: reports
path: docs/reports/
interop-publish:
name: Publish
runs-on: ubuntu-latest
# Publishing must only happen when triggered on the 'main' branch to prevent
# tests on other branches from polluting the published reports. Note that
# `always()`` is a special flag that is REQUIRED in order to get this job to
# run if jobs listed in the `needs:` section fail.
if: github.ref == 'refs/heads/main' && always()
# All jobs for which output will be published must be complete before this
# job can run.
needs:
- interop-credentials-revocation
- interop-did-web-discovery
- interop-presentations-exchange-oauth
- traceable-presentation-workflow
steps:
# Check out repo, setup node, and install dependencies.
# @see https://github.com/actions/setup-node#usage
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 16.15.1
cache: 'npm'
- run: npm ci
# Download 'reports' artifact
- uses: actions/download-artifact@v3
with:
name: reports
path: docs/reports/
# Build report index
- name: Build JSON Index
run: npm run report:index -- --folder interoperability
# Set up Python 3.10
- name: Set up Python 3.10
uses: actions/setup-python@v4
with:
python-version: '3.10'
cache: pip
- run: pip install -r ./reporting/requirements.txt
# Build interactive report
- name: Build Interoperability Report
working-directory: ./reporting
run: ./reporter.py --mode ci --interoperability
# Publish report subfolder to GitHub Pages
- name: Publish Interoperability Report
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./docs/reports
destination_dir: reports/interoperability
# Prepare an archive folder name and update the index.json appropriately
- name: Prepare Interoperability Archive
id: archive
run: |
FOLDER=interoperability-$(date +'%s')
sed -i "s#reports/interoperability/#reports/$FOLDER/#" ./docs/reports/index.json
echo "::set-output name=folder::$FOLDER"
# Publish report archive subfolder to GitHub Pages
- name: Publish Interoperability Archive
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./docs/reports
destination_dir: reports/${{ steps.archive.outputs.folder }}