Skip to content

Nightly Testing

Nightly Testing #59

name: Nightly Testing
on:
schedule:
- cron: '0 6 * * *' # Runs at midnight Mountain every day
workflow_dispatch:
# Abort prior jobs in the same workflow / PR
concurrency:
group: test-fleeting-${{ github.ref }}
cancel-in-progress: true
permissions:
id-token: write
contents: read
jobs:
nightly-testing:
name: Test Fleeting GitLab Runners
runs-on: uds-swf-ubuntu-big-boy-8-core
strategy:
matrix:
flavor: [upstream, registry1]
fail-fast: false
env:
SHA: ${{ github.sha }}
FLAVOR: ${{ matrix.flavor }}
UDS_REGION: us-gov-west-1
UDS_STATE_BUCKET_NAME: uds-ci-govcloud-us-gov-west-1-tfstate
UDS_STATE_DYNAMODB_TABLE_NAME: uds-ci-govcloud-tfstate-lock
TF_VAR_ami_id: ${{ secrets.AMI_ID }}
TF_VAR_permissions_boundary_name: ${{ secrets.PERMISSIONS_BOUNDARY_NAME }}
steps:
- name: Set ENV
run: |
echo "UDS_GITLAB_RUNNER_AUTOSCALING_GROUP=uds-package-gitlab-runner-ci-${FLAVOR}-${SHA:0:7}" >> $GITHUB_ENV
echo "UDS_STATE_KEY=tfstate/ci/install/${SHA:0:7}-gitlab-runner-${FLAVOR}-aws.tfstate" >> $GITHUB_ENV
echo "TF_VAR_runner_ip=$(curl -s https://api.ipify.org)" >> $GITHUB_ENV
echo "TF_VAR_region=${UDS_REGION}" >> $GITHUB_ENV
echo "TF_VAR_name=uds-package-gitlab-runner-ci-${FLAVOR}-${SHA:0:7}" >> $GITHUB_ENV
- name: Checkout repository
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@e3dd6a429d7300a6a4c196c26e071d42e0343502 # v4
with:
role-to-assume: ${{ secrets.AWS_GOVCLOUD_ROLE_TO_ASSUME }}
role-session-name: ${{ github.job || github.event.client_payload.pull_request.head.sha || github.sha }}
aws-region: ${{ env.UDS_REGION }}
role-duration-seconds: 21600
- name: Environment setup
uses: defenseunicorns/uds-common/.github/actions/setup@e7c0643d3f9d74ce49c7386b48964d2be646d726 # v0.10.0
with:
registry1Username: ${{ secrets.IRON_BANK_ROBOT_USERNAME }}
registry1Password: ${{ secrets.IRON_BANK_ROBOT_PASSWORD }}
ghToken: ${{ secrets.GITHUB_TOKEN }}
- name: Setup Tofu
uses: opentofu/setup-opentofu@12f4debbf681675350b6cd1f0ff8ecfbda62027b # v1.0.4
with:
tofu_version: 1.8.1
tofu_wrapper: false
- name: Apply IAC
run: uds run -f tasks/iac.yaml apply-iac --no-progress
timeout-minutes: 20
- name: IRSA Setup
run: |
echo "Getting OIDC keypair"
mkdir irsa
aws secretsmanager get-secret-value --secret-id govcloud-ci-oidc-private-key | jq -r '.SecretString' > irsa/signer.key
aws secretsmanager get-secret-value --secret-id govcloud-ci-oidc-public-key | jq -r '.SecretString' > irsa/signer.key.pub
timeout-minutes: 20
- name: NPM setup
run: cd tests && npm ci
- name: Test Fleeting Bundle
run: |
pushd .github/test-infra/asg-iac
tofu output -raw jumpbox_private_key > ~/.ssh/id_rsa_jump
chmod 600 ~/.ssh/id_rsa_jump
ssh -o StrictHostKeyChecking=no -i ~/.ssh/id_rsa_jump \
-o ServerAliveInterval=60 -o ServerAliveCountMax=3 \
-R 8080:localhost:443 "ubuntu@$(tofu output -raw jumpbox_public_ip)" \
'sudo socat TCP-LISTEN:443,reuseaddr,keepalive,nodelay,fork TCP:localhost:8080' > /tmp/debug-tunnel.log 2>&1 &
popd
UDS_GITLAB_RUNNER_AUTOSCALING_ROLE_ARN=$(cd .github/test-infra/asg-iac && tofu output -raw asg_role_arn) uds run test-fleeting --set FLAVOR=${{ matrix.flavor }} --no-progress
timeout-minutes: 25
env:
UDS_K3D_EXTRA_ARGS: --k3s-arg=--kube-apiserver-arg=service-account-key-file=/irsa/signer.key.pub@server:* --k3s-arg=--kube-apiserver-arg=service-account-signing-key-file=/irsa/signer.key@server:* --k3s-arg=--kube-apiserver-arg=api-audiences=kubernetes.svc.default@server:* --k3s-arg=--kube-apiserver-arg=service-account-issuer=https://govcloud-ci-oidc.s3.us-gov-west-1.amazonaws.com@server:* --k3s-arg=--kube-apiserver-arg=audit-log-path=/var/log/kubernetes/audit/audit.log@server:* --volume ${{ github.workspace }}/irsa:/irsa@server:*
- name: Debug Output
if: always()
uses: defenseunicorns/uds-common/.github/actions/debug-output@e7c0643d3f9d74ce49c7386b48964d2be646d726 # v0.10.0
- name: Save logs
if: always()
uses: defenseunicorns/uds-common/.github/actions/save-logs@e7c0643d3f9d74ce49c7386b48964d2be646d726 # v0.10.0
with:
suffix: ${{ matrix.type }}-${{ matrix.flavor }}-${{ github.run_id }}-${{ github.run_attempt }}
- name: Destroy IAC
if: always()
run: uds run -f tasks/iac.yaml destroy-iac --no-progress
timeout-minutes: 10
continue-on-error: true