151 lines
6.5 KiB
YAML
151 lines
6.5 KiB
YAML
---
|
|
name: Vault UI Tests
|
|
|
|
on:
|
|
workflow_call:
|
|
inputs:
|
|
test_filter:
|
|
type: string
|
|
description: "A filter to limit the ui tests to. Will be appended to the ember test command as '-f=<filter>'"
|
|
required: false
|
|
storage_backend:
|
|
type: string
|
|
description: "The storage backend to use, either 'raft' or 'consul'"
|
|
default: raft
|
|
workflow_dispatch:
|
|
inputs:
|
|
test_filter:
|
|
type: string
|
|
description: "A filter to limit the ui tests to. Will be appended to the ember test command as '-f=<filter>'"
|
|
required: false
|
|
storage_backend:
|
|
description: "The storage backend to use, either 'raft' or 'consul'"
|
|
required: true
|
|
default: raft
|
|
type: choice
|
|
options:
|
|
- raft
|
|
- consul
|
|
|
|
jobs:
|
|
get-metadata:
|
|
name: Get metadata
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
go-version: ${{ steps.get-metadata.outputs.go-version }}
|
|
node-version: ${{ steps.get-metadata.outputs.node-version }}
|
|
runs-on: ${{ steps.get-metadata.outputs.runs-on }}
|
|
vault_edition: ${{ steps.get-metadata.outputs.vault_edition }}
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
- id: get-metadata
|
|
env:
|
|
IS_ENT: ${{ startsWith(github.event.repository.name, 'vault-enterprise' ) }}
|
|
run: |
|
|
echo "go-version=$(cat ./.go-version)" >> $GITHUB_OUTPUT
|
|
echo "node-version=$(cat ./ui/.nvmrc)" >> $GITHUB_OUTPUT
|
|
if ${IS_ENT} == true; then
|
|
echo "detected vault_edition=ent"
|
|
echo "runs-on=['self-hosted', 'ondemand', 'os=linux', 'type=m5d.4xlarge']" >> $GITHUB_OUTPUT
|
|
echo "vault_edition=ent" >> $GITHUB_OUTPUT
|
|
else
|
|
echo "detected vault_edition=oss"
|
|
echo "runs-on=\"custom-linux-xl-vault-latest\"" >> $GITHUB_OUTPUT
|
|
echo "vault_edition=oss" >> $GITHUB_OUTPUT
|
|
fi
|
|
|
|
run-ui-tests:
|
|
name: Run UI Tests
|
|
needs: get-metadata
|
|
runs-on: ${{ fromJSON(needs.get-metadata.outputs.runs-on) }}
|
|
timeout-minutes: 90
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.ELEVATED_GITHUB_TOKEN }}
|
|
# Pass in enos variables
|
|
ENOS_VAR_aws_region: us-east-1
|
|
ENOS_VAR_aws_ssh_keypair_name: ${{ github.event.repository.name }}-ci-ssh-key
|
|
ENOS_VAR_aws_ssh_private_key_path: ./support/private_key.pem
|
|
ENOS_VAR_tfc_api_token: ${{ secrets.TF_API_TOKEN }}
|
|
ENOS_VAR_terraform_plugin_cache_dir: ./support/terraform-plugin-cache
|
|
ENOS_VAR_vault_license_path: ./support/vault.hclic
|
|
GOPRIVATE: github.com/hashicorp
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v3
|
|
- name: Set Up Go
|
|
uses: actions/setup-go@v3
|
|
with:
|
|
go-version: ${{ needs.get-metadata.outputs.go-version }}
|
|
- uses: hashicorp/action-setup-enos@v1
|
|
with:
|
|
github-token: ${{ secrets.ELEVATED_GITHUB_TOKEN }}
|
|
- name: Set Up Git
|
|
run: git config --global url."https://${{ secrets.elevated_github_token }}:@github.com".insteadOf "https://github.com"
|
|
- name: Set Up Node
|
|
uses: actions/setup-node@v3
|
|
with:
|
|
node-version: ${{ needs.get-metadata.outputs.node-version }}
|
|
- name: Set Up Terraform
|
|
uses: hashicorp/setup-terraform@v2
|
|
with:
|
|
cli_config_credentials_token: ${{ secrets.TF_API_TOKEN }}
|
|
terraform_wrapper: false
|
|
- name: Prepare scenario dependencies
|
|
run: |
|
|
mkdir -p ./enos/support/terraform-plugin-cache
|
|
echo "${{ secrets.SSH_KEY_PRIVATE_CI }}" > ./enos/support/private_key.pem
|
|
chmod 600 ./enos/support/private_key.pem
|
|
- name: Set Up Vault Enterprise License
|
|
if: contains(${{ github.event.repository.name }}, 'ent')
|
|
run: echo "${{ secrets.VAULT_LICENSE }}" > ./enos/support/vault.hclic || true
|
|
- name: Check Chrome Installed
|
|
id: chrome-check
|
|
run: echo "chrome-version=$(chrome --version 2> /dev/null || google-chrome --version 2> /dev/null || google-chrome-stable --version 2> /dev/null || echo 'not-installed')" >> $GITHUB_OUTPUT
|
|
- name: Install Chrome Dependencies
|
|
if: steps.chrome-check.outputs.chrome-version == 'not-installed'
|
|
run: |
|
|
sudo apt update
|
|
sudo apt install -y libnss3-dev libgdk-pixbuf2.0-dev libgtk-3-dev libxss-dev libasound2
|
|
- name: Install Chrome
|
|
if: steps.chrome-check.outputs.chrome-version == 'not-installed'
|
|
uses: browser-actions/setup-chrome@v1
|
|
- name: Installed Chrome Version
|
|
run: |
|
|
echo "Installed Chrome Version = [$(chrome --version 2> /dev/null || google-chrome --version 2> /dev/null || google-chrome-stable --version 2> /dev/null)]"
|
|
- name: Configure AWS credentials from Test account
|
|
uses: aws-actions/configure-aws-credentials@v1-node16
|
|
with:
|
|
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID_CI }}
|
|
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY_CI }}
|
|
aws-region: us-east-1
|
|
role-to-assume: ${{ secrets.AWS_ROLE_ARN_CI }}
|
|
role-skip-session-tagging: true
|
|
role-duration-seconds: 3600
|
|
- name: Set Up Cluster
|
|
id: setup_cluster
|
|
env:
|
|
ENOS_VAR_ui_run_tests: false
|
|
# Continue once and retry to handle occasional blips when creating infrastructure.
|
|
continue-on-error: true
|
|
run: enos scenario launch --timeout 60m0s --chdir ./enos ui edition:${{ needs.get-metadata.outputs.vault_edition }} backend:${{ inputs.storage_backend }}
|
|
- name: Retry Set Up Cluster
|
|
id: setup_cluster_retry
|
|
if: steps.setup_cluster.outcome == 'failure'
|
|
env:
|
|
ENOS_VAR_ui_run_tests: false
|
|
run: enos scenario launch --timeout 60m0s --chdir ./enos ui edition:${{ needs.get-metadata.outputs.vault_edition }} backend:${{ inputs.storage_backend }}
|
|
- name: Run UI Tests
|
|
id: run_ui_tests
|
|
env:
|
|
ENOS_VAR_ui_test_filter: "${{ inputs.test_filter }}"
|
|
run: enos scenario run --timeout 60m0s --chdir ./enos ui edition:${{ needs.get-metadata.outputs.vault_edition }} backend:${{ inputs.storage_backend }}
|
|
- name: Ensure scenario has been destroyed
|
|
if: ${{ always() }}
|
|
run: enos scenario destroy --timeout 60m0s --chdir ./enos ui edition:${{ needs.get-metadata.outputs.vault_edition }} backend:${{ inputs.storage_backend }}
|
|
- name: Clean up Enos runtime directories
|
|
if: ${{ always() }}
|
|
run: |
|
|
rm -rf /tmp/enos*
|
|
rm -rf ./enos/support
|
|
rm -rf ./enos/.enos
|