forked from hashicorp/vault
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[QT-304] Add enos ui scenario (hashicorp#18518)
* Add enos ui scenario * Add github action for running the UI scenario
- Loading branch information
Mike Baum
authored
Feb 3, 2023
1 parent
7f1e021
commit 6b7787c
Showing
11 changed files
with
507 additions
and
4 deletions.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,147 @@ | ||
--- | ||
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 | ||
echo "chrome-installed=$(chrome --version && echo true || echo false)" >> $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: Install Chrome Dependencies | ||
if: ${{ !needs.get-metadata.outputs.chrome-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: ${{ !needs.get-metadata.outputs.chrome-installed }} | ||
uses: browser-actions/setup-chrome@v1 | ||
- run: | | ||
chrome --version | ||
- 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 |
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
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
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
Oops, something went wrong.