Merge pull request #606 from atsign-foundation/release-v4.0.0 #1335
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: end2end_tests | |
permissions: | |
contents: read | |
on: | |
workflow_dispatch: | |
push: | |
branches: | |
- trunk | |
pull_request: | |
branches: | |
- trunk | |
env: | |
SSHNP_ATSIGN: "@8incanteater" | |
SSHNPD_ATSIGN: "@8052simple" | |
SSHRVD_ATSIGN: "@8485wealthy51" | |
PROD_AM_RVD_ATSIGN: "@rv_am" | |
PROD_AP_RVD_ATSIGN: "@rv_ap" | |
PROD_EU_RVD_ATSIGN: "@rv_eu" | |
PROD_RVD_ATSIGN: "PROD_AM_RVD_ATSIGN" # Use am by default for PROD tests | |
DOCKER_COMPOSE_UP_CMD: "docker compose up --abort-on-container-exit" | |
RELEASES: | | |
v3.1.2 | |
v3.2.0 | |
v3.3.0 | |
v3.4.0 | |
v3.4.2 | |
BRANCHES: | | |
trunk | |
jobs: | |
# Test suite 1 | |
# Main tests of local and trunk | |
e2e_test: | |
# Don't run on PRs from a fork or Dependabot as the secrets aren't available | |
if: ${{ github.event.pull_request.head.repo.fork == false && github.actor != 'dependabot[bot]'}} | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
np: [local, trunk] | |
npd: [local, trunk] | |
exclude: | |
# Don't run these against themselves, pointless to test | |
- np: trunk | |
npd: trunk | |
steps: | |
- name: Show Matrix Values | |
run: | | |
echo "job index: ${{ strategy.job-index }}" | |
echo "np: ${{ matrix.np }}" | |
echo "npd: ${{ matrix.npd }}" | |
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
- name: Setup Devicename | |
# First two guarantee a unique # per workflow call | |
# Last two guarantee a unique # per job per strategy in matrix | |
run: | | |
echo "DEVICENAME=${{ github.run_id }}${{ github.run_attempt }}1${{ strategy.job-index }}" >> $GITHUB_ENV | |
- name: Setup NP/NPD key env | |
run: | | |
SSHNP_ATKEYS="$(tr '[:lower:]' '[:upper:]' <<< '${{ env.SSHNP_ATSIGN }}')" | |
echo "SSHNP_ATKEYS=ATKEYS_${SSHNP_ATKEYS:1}" >> $GITHUB_ENV | |
SSHNPD_ATKEYS="$(tr '[:lower:]' '[:upper:]' <<< '${{ env.SSHNPD_ATSIGN }}')" | |
echo "SSHNPD_ATKEYS=ATKEYS_${SSHNPD_ATKEYS:1}" >> $GITHUB_ENV | |
- name: Setup NP/NPD keys | |
working-directory: tests/end2end_tests/contexts | |
run: | | |
echo "${{ secrets[env.SSHNP_ATKEYS] }}" > sshnp/.atsign/keys/${{ env.SSHNP_ATSIGN }}_key.atKeys | |
echo "${{ secrets[env.SSHNPD_ATKEYS] }}" > sshnpd/.atsign/keys/${{ env.SSHNPD_ATSIGN }}_key.atKeys | |
- name: Set up entrypoints | |
uses: ./.github/composite/setup_entrypoints | |
with: | |
sshnp: ${{ matrix.np }} | |
sshnp_atsign: ${{ env.SSHNP_ATSIGN }} | |
sshnpd: ${{ matrix.npd }} | |
sshnpd_atsign: ${{ env.SSHNPD_ATSIGN }} | |
sshrvd_atsign: ${{ env[env.PROD_RVD_ATSIGN] }} | |
devicename: ${{ env.DEVICENAME }} | |
- name: Ensure entrypoints exist | |
working-directory: tests/end2end_tests/contexts | |
run: | | |
cat sshnp/entrypoint.sh | |
cat sshnpd/entrypoint.sh | |
cat sshrvd/entrypoint.sh | |
- name: Create docker-compose.yaml | |
working-directory: tests/end2end_tests/tests | |
run: | | |
cat docker-compose-base.yaml > docker-compose.yaml | |
- name: Add runtime-branch image to docker-compose.yaml | |
working-directory: tests/end2end_tests/tests | |
if: ${{ contains(env.BRANCHES, matrix.np) || contains(env.BRANCHES, matrix.npd) }} | |
run: | | |
# Add the base service | |
cat service-image-runtime-branch.yaml >> docker-compose.yaml | |
# Add the branch name and runtime | |
if [ "${{contains(env.BRANCHES, matrix.np)}}" = true ]; then | |
echo ' - branch=${{ matrix.np }}' >> docker-compose.yaml | |
echo ' image: atsigncompany/sshnp-e2e-runtime:${{ matrix.np }}' >> docker-compose.yaml | |
elif [ "${{contains(env.BRANCHES, matrix.npd)}}" = true ]; then | |
echo ' - branch=${{ matrix.npd }}' >> docker-compose.yaml | |
echo ' image: atsigncompany/sshnp-e2e-runtime:${{ matrix.npd }}' >> docker-compose.yaml | |
fi | |
- name: Add container-sshnp to docker-compose.yaml | |
working-directory: tests/end2end_tests/tests | |
run: | | |
# Add the base service | |
cat service-container-sshnp.yaml >> docker-compose.yaml | |
# Add the runtime | |
echo ' image: atsigncompany/sshnp-e2e-runtime:${{ matrix.np }}' >> docker-compose.yaml | |
# Add the dependencies | |
echo ' depends_on:' >> docker-compose.yaml | |
echo ' container-sshnpd:' >> docker-compose.yaml | |
echo ' condition: service_healthy' >> docker-compose.yaml | |
if [ "${{contains(env.BRANCHES, matrix.np)}}" = true ]; then | |
echo ' image-runtime-branch:' >> docker-compose.yaml | |
else | |
echo ' image-runtime-local:' >> docker-compose.yaml | |
fi | |
echo ' condition: service_started' >> docker-compose.yaml | |
- name: Add container-sshnpd to docker-compose.yaml | |
working-directory: tests/end2end_tests/tests | |
run: | | |
# Add the base service | |
cat service-container-sshnpd.yaml >> docker-compose.yaml | |
# Add the runtime | |
echo ' image: atsigncompany/sshnp-e2e-runtime:${{ matrix.npd }}' >> docker-compose.yaml | |
# Add the dependencies | |
echo ' depends_on:' >> docker-compose.yaml | |
if [ "${{contains(env.BRANCHES, matrix.npd)}}" = true ]; then | |
echo ' - image-runtime-branch' >> docker-compose.yaml | |
else | |
echo ' - image-runtime-local' >> docker-compose.yaml | |
fi | |
- name: docker-compose.yaml | |
if: always() | |
working-directory: tests/end2end_tests/tests | |
run: | | |
cat docker-compose.yaml | |
- name: Build | |
working-directory: tests/end2end_tests/tests | |
run: | | |
docker compose build | |
- name: Test | |
working-directory: tests/end2end_tests/tests | |
run: | | |
${{ env.DOCKER_COMPOSE_UP_CMD }} | |
- name: Logs | |
if: always() | |
working-directory: tests/end2end_tests/tests | |
run: | | |
docker compose ps -a | |
docker compose logs --timestamps | |
- name: Found "Test Passed" in Logs | |
if: always() | |
working-directory: tests/end2end_tests/tests | |
run: | | |
docker compose logs --timestamps | grep -q "Test Passed$" | |
- name: Tear down | |
# Always tear down outside of the act environment | |
# but don't tear down on failure in the act environment | |
if: ${{ !env.ACT }} || success() | |
working-directory: tests/end2end_tests/tests | |
run: | | |
docker compose down | |
# Test suite 2 | |
# Backward compatibility tests | |
e2e_release_test: | |
# Don't run on push and on pull, meant to be ran manually (workflow dispatch) | |
if: ${{ github.event_name != 'push' && github.event_name != 'pull_request' }} | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- np: local | |
npd: v3.4.2 | |
- np: v3.4.2 | |
npd: local | |
- np: local | |
npd: v3.3.0 | |
- np: v3.3.0 | |
npd: local | |
steps: | |
- name: Show Matrix Values | |
run: | | |
echo "job index: ${{ strategy.job-index }}" | |
echo "np: ${{ matrix.np }}" | |
echo "npd: ${{ matrix.npd }}" | |
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
- name: Setup Devicename | |
# First two guarantee a unique # per workflow call | |
# Last two guarantee a unique # per job per strategy in matrix | |
run: | | |
echo "DEVICENAME=${{ github.run_id }}${{ github.run_attempt }}3${{ strategy.job-index }}" >> $GITHUB_ENV | |
- name: Setup NP/NPD key env | |
run: | | |
SSHNP_ATKEYS="$(tr '[:lower:]' '[:upper:]' <<< '${{ env.SSHNP_ATSIGN }}')" | |
echo "SSHNP_ATKEYS=ATKEYS_${SSHNP_ATKEYS:1}" >> $GITHUB_ENV | |
SSHNPD_ATKEYS="$(tr '[:lower:]' '[:upper:]' <<< '${{ env.SSHNPD_ATSIGN }}')" | |
echo "SSHNPD_ATKEYS=ATKEYS_${SSHNPD_ATKEYS:1}" >> $GITHUB_ENV | |
- name: Setup NP/NPD keys | |
working-directory: tests/end2end_tests/contexts | |
run: | | |
echo "${{ secrets[env.SSHNP_ATKEYS] }}" > sshnp/.atsign/keys/${{ env.SSHNP_ATSIGN }}_key.atKeys | |
echo "${{ secrets[env.SSHNPD_ATKEYS] }}" > sshnpd/.atsign/keys/${{ env.SSHNPD_ATSIGN }}_key.atKeys | |
- name: Set up entrypoints | |
uses: ./.github/composite/setup_entrypoints | |
with: | |
sshnp: ${{ matrix.np }} | |
sshnp_atsign: ${{ env.SSHNP_ATSIGN }} | |
sshnpd: ${{ matrix.npd }} | |
sshnpd_atsign: ${{ env.SSHNPD_ATSIGN }} | |
sshrvd_atsign: ${{ env[env.PROD_RVD_ATSIGN] }} | |
devicename: ${{ env.DEVICENAME }} | |
args: "-P 55" | |
- name: Ensure entrypoints exist | |
working-directory: tests/end2end_tests/contexts | |
run: | | |
cat sshnp/entrypoint.sh | |
cat sshnpd/entrypoint.sh | |
cat sshrvd/entrypoint.sh | |
- name: Create docker-compose.yaml | |
working-directory: tests/end2end_tests/tests | |
run: | | |
cat docker-compose-base.yaml > docker-compose.yaml | |
- name: Add runtime-release image to docker-compose.yaml | |
working-directory: tests/end2end_tests/tests | |
if: ${{ contains(env.RELEASES, matrix.np) || contains(env.RELEASES, matrix.npd) }} | |
run: | | |
cat service-image-runtime-release.yaml >> docker-compose.yaml | |
if [ "${{contains(env.RELEASES, matrix.np)}}" = true ]; then | |
echo ' - release=${{ matrix.np }}' >> docker-compose.yaml | |
echo ' image: atsigncompany/sshnp-e2e-runtime:${{ matrix.np }}' >> docker-compose.yaml | |
elif [ "${{contains(env.RELEASES, matrix.npd)}}" = true ]; then | |
echo ' - release=${{ matrix.npd }}' >> docker-compose.yaml | |
echo ' image: atsigncompany/sshnp-e2e-runtime:${{ matrix.npd }}' >> docker-compose.yaml | |
fi | |
- name: Add container-sshnp to docker-compose.yaml | |
working-directory: tests/end2end_tests/tests | |
run: | | |
# Add the base service | |
cat service-container-sshnp.yaml >> docker-compose.yaml | |
# Add the runtime | |
echo ' image: atsigncompany/sshnp-e2e-runtime:${{ matrix.np }}' >> docker-compose.yaml | |
# Add the dependencies | |
echo ' depends_on:' >> docker-compose.yaml | |
echo ' container-sshnpd:' >> docker-compose.yaml | |
echo ' condition: service_healthy' >> docker-compose.yaml | |
if [ "${{contains(env.RELEASES, matrix.np)}}" = true ]; then | |
echo ' image-runtime-release:' >> docker-compose.yaml | |
else | |
echo ' image-runtime-local:' >> docker-compose.yaml | |
fi | |
echo ' condition: service_started' >> docker-compose.yaml | |
- name: Add container-sshnpd to docker-compose.yaml | |
working-directory: tests/end2end_tests/tests | |
run: | | |
# Add the base service | |
cat service-container-sshnpd.yaml >> docker-compose.yaml | |
# Add the runtime | |
echo ' image: atsigncompany/sshnp-e2e-runtime:${{ matrix.npd }}' >> docker-compose.yaml | |
# Add the dependencies | |
echo ' depends_on:' >> docker-compose.yaml | |
if [ "${{contains(env.RELEASES, matrix.npd)}}" = true ]; then | |
echo ' - image-runtime-release' >> docker-compose.yaml | |
else | |
echo ' - image-runtime-local' >> docker-compose.yaml | |
fi | |
- name: docker-compose.yaml | |
if: always() | |
working-directory: tests/end2end_tests/tests | |
run: | | |
cat docker-compose.yaml | |
- name: Build | |
working-directory: tests/end2end_tests/tests | |
run: | | |
docker compose build | |
- name: Test | |
working-directory: tests/end2end_tests/tests | |
run: | | |
${{ env.DOCKER_COMPOSE_UP_CMD }} | |
- name: Logs | |
if: always() | |
continue-on-error: true # failing this step does not fail the entire job | |
working-directory: tests/end2end_tests/tests | |
run: | | |
docker compose ps -a | |
docker compose logs --timestamps | |
- name: Found "Test Passed" in Logs | |
if: always() | |
working-directory: tests/end2end_tests/tests | |
run: | | |
docker compose logs --timestamps | grep -q "Test Passed$" | |
- name: Tear down | |
# Always tear down outside of the act environment | |
# but don't tear down on failure in the act environment | |
if: ${{ !env.ACT }} || success() | |
continue-on-error: true # failing this step does not fail the entire job | |
working-directory: tests/end2end_tests/tests | |
run: | | |
docker compose down | |
# Test suite 4 | |
# Use alternative port on local | |
e2e_alternate_port_test: | |
# Don't run on forks (cause no secrets), don't run if dependebot (cause no secrets) | |
if: ${{ github.event.pull_request.head.repo.fork == false && github.actor != 'dependabot[bot]'}} | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
- name: Setup Devicename | |
# First two guarantee a unique # per workflow call | |
# Last two guarantee a unique # per job per strategy in matrix | |
run: | | |
echo "DEVICENAME=${{ github.run_id }}${{ github.run_attempt }}4${{ strategy.job-index }}" >> $GITHUB_ENV | |
- name: Setup NP/NPD key env | |
run: | | |
SSHNP_ATKEYS="$(tr '[:lower:]' '[:upper:]' <<< '${{ env.SSHNP_ATSIGN }}')" | |
echo "SSHNP_ATKEYS=ATKEYS_${SSHNP_ATKEYS:1}" >> $GITHUB_ENV | |
SSHNPD_ATKEYS="$(tr '[:lower:]' '[:upper:]' <<< '${{ env.SSHNPD_ATSIGN }}')" | |
echo "SSHNPD_ATKEYS=ATKEYS_${SSHNPD_ATKEYS:1}" >> $GITHUB_ENV | |
- name: Setup NP/NPD keys | |
working-directory: tests/end2end_tests/contexts | |
run: | | |
echo "${{ secrets[env.SSHNP_ATKEYS] }}" > sshnp/.atsign/keys/${{ env.SSHNP_ATSIGN }}_key.atKeys | |
echo "${{ secrets[env.SSHNPD_ATKEYS] }}" > sshnpd/.atsign/keys/${{ env.SSHNPD_ATSIGN }}_key.atKeys | |
- name: Set up entrypoints | |
working-directory: tests/end2end_tests/contexts/_init_ | |
run: | | |
./setup-sshnp-entrypoint.sh ${{ env.DEVICENAME }} ${{ env.SSHNP_ATSIGN }} ${{ env.SSHNPD_ATSIGN }} ${{ env[env.PROD_RVD_ATSIGN] }} sshnp_entrypoint.sh "-i ~/.ssh/id_ed25519 -s -v -P 55" | |
./setup-sshnpd-entrypoint.sh ${{ env.DEVICENAME }} ${{ env.SSHNP_ATSIGN }} ${{ env.SSHNPD_ATSIGN }} sshnpd_entrypoint.sh | |
- name: Ensure entrypoints exist | |
working-directory: tests/end2end_tests/contexts | |
run: | | |
cat sshnp/entrypoint.sh | |
cat sshnpd/entrypoint.sh | |
- name: Build docker-compose.yaml | |
working-directory: tests/end2end_tests/tests | |
run: | | |
cat docker-compose-base.yaml > docker-compose.yaml | |
cat service-container-sshnp.yaml >> docker-compose.yaml | |
echo ' image: atsigncompany/sshnp-e2e-runtime:local' >> docker-compose.yaml | |
echo ' depends_on:' >> docker-compose.yaml | |
echo ' image-runtime-local:' >> docker-compose.yaml | |
echo ' condition: service_started' >> docker-compose.yaml | |
echo ' container-sshnpd:' >> docker-compose.yaml | |
echo ' condition: service_healthy' >> docker-compose.yaml | |
cat service-container-sshnpd.yaml >> docker-compose.yaml | |
echo ' image: atsigncompany/sshnp-e2e-runtime:local' >> docker-compose.yaml | |
echo ' depends_on:' >> docker-compose.yaml | |
echo ' image-runtime-local:' >> docker-compose.yaml | |
echo ' condition: service_started' >> docker-compose.yaml | |
- name: docker-compose.yaml | |
if: always() | |
working-directory: tests/end2end_tests/tests | |
run: | | |
cat docker-compose.yaml | |
- name: Build | |
working-directory: tests/end2end_tests/tests | |
run: | | |
docker compose build | |
- name: Test | |
working-directory: tests/end2end_tests/tests | |
run: | | |
${{ env.DOCKER_COMPOSE_UP_CMD }} | |
- name: Logs | |
if: always() | |
continue-on-error: true # failing this step does not fail the entire job | |
working-directory: tests/end2end_tests/tests | |
run: | | |
docker compose ps -a | |
docker compose logs --timestamps | |
- name: Found "Test Passed" in Logs | |
if: always() | |
working-directory: tests/end2end_tests/tests | |
run: | | |
docker compose logs --timestamps | grep -q "Test Passed$" | |
- name: Tear down | |
# Always tear down outside of the act environment | |
# but don't tear down on failure in the act environment | |
if: ${{ !env.ACT }} || success() | |
continue-on-error: true # failing this step does not fail the entire job | |
working-directory: tests/end2end_tests/tests | |
run: | | |
docker compose down |