Skip to content

fix: terminal session and private key issues #1479

fix: terminal session and private key issues

fix: terminal session and private key issues #1479

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