ci: create tests-az.yml workflow
This commit is contained in:
parent
fa00abf9de
commit
833b652f77
121
.github/workflows/tests-az.yml
vendored
Normal file
121
.github/workflows/tests-az.yml
vendored
Normal file
|
@ -0,0 +1,121 @@
|
|||
name: Tests (Azure Test)
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
main:
|
||||
name: Clean DB + Build Image
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
steps:
|
||||
- name: Launch VM on Azure
|
||||
id: azlaunch
|
||||
run: |
|
||||
echo "Authenticating to Azure..."
|
||||
az login --service-principal -u ${{ secrets.AZ_TESTS_APP_ID }} -p ${{ secrets.AZ_TESTS_PWD }} --tenant ${{ secrets.AZ_TESTS_TENANT_ID }}
|
||||
echo "Creating VM..."
|
||||
vminfo=$(az vm create \
|
||||
--resource-group ghaDatatrackerTests \
|
||||
--name tmpGhaVM2 \
|
||||
--image Ubuntu2204 \
|
||||
--admin-username azureuser \
|
||||
--generate-ssh-keys \
|
||||
--priority Spot \
|
||||
--size Standard_D4as_v5 \
|
||||
--max-price -1 \
|
||||
--os-disk-size-gb 15 \
|
||||
--eviction-policy Delete \
|
||||
--nic-delete-option Delete \
|
||||
--output tsv \
|
||||
--query "publicIpAddress")
|
||||
echo "ipaddr=$vminfo" >> "$GITHUB_OUTPUT"
|
||||
echo "VM Public IP: $vminfo"
|
||||
cat ~/.ssh/id_rsa > ${{ github.workspace }}/prvkey.key
|
||||
ssh-keyscan -t rsa $vminfo >> ~/.ssh/known_hosts
|
||||
|
||||
- name: Remote SSH into VM
|
||||
uses: appleboy/ssh-action@55dabf81b49d4120609345970c91507e2d734799
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
host: ${{ steps.azlaunch.outputs.ipaddr }}
|
||||
port: 22
|
||||
username: azureuser
|
||||
command_timeout: 60m
|
||||
key_path: ${{ github.workspace }}/prvkey.key
|
||||
envs: GITHUB_TOKEN
|
||||
script_stop: true
|
||||
script: |
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
lsb_release -a
|
||||
sudo apt-get update
|
||||
sudo apt-get upgrade -y
|
||||
sudo apt-get install -y ca-certificates curl gnupg git
|
||||
|
||||
echo "Installing Docker..."
|
||||
curl -fsSL https://get.docker.com -o get-docker.sh
|
||||
sudo sh get-docker.sh
|
||||
|
||||
echo "Starting Containers..."
|
||||
sudo docker network create dtnet
|
||||
sudo docker run -d --name db --network=dtnet ghcr.io/ietf-tools/datatracker-db:latest
|
||||
sudo docker run -d --name app --network=dtnet ghcr.io/ietf-tools/datatracker-app-base:latest
|
||||
|
||||
echo "Start tests..."
|
||||
cat <<EOF | docker exec --interactive app sh
|
||||
mkdir workspace
|
||||
git clone --depth=1 https://github.com/ietf-tools/datatracker.git workspace
|
||||
cd workspace
|
||||
echo "Prepare tests..."
|
||||
chmod +x ./dev/tests/prepare.sh
|
||||
sh ./dev/tests/prepare.sh
|
||||
echo "Ensure DB is ready..."
|
||||
/usr/local/bin/wait-for db:5432 -- echo "DB ready"
|
||||
echo "Running checks..."
|
||||
./ietf/manage.py check
|
||||
./ietf/manage.py migrate --fake-initial
|
||||
echo "Validating migrations..."
|
||||
if ! ( ietf/manage.py makemigrations --dry-run --check --verbosity 3 ) ; then
|
||||
echo "Model changes without migrations found."
|
||||
exit 1
|
||||
fi
|
||||
echo "Running tests..."
|
||||
./ietf/manage.py test -v2 --validate-html-harder --settings=settings_test
|
||||
coverage xml
|
||||
EOF
|
||||
|
||||
- name: Destroy VM + resources
|
||||
if: always()
|
||||
shell: pwsh
|
||||
run: |
|
||||
echo "Destroying VM..."
|
||||
az vm delete -g ghaInfraDB -n tmpGhaVM1 --yes --force-deletion true
|
||||
|
||||
$resourceOrderRemovalOrder = [ordered]@{
|
||||
"Microsoft.Compute/virtualMachines" = 0
|
||||
"Microsoft.Compute/disks" = 1
|
||||
"Microsoft.Network/networkInterfaces" = 2
|
||||
"Microsoft.Network/publicIpAddresses" = 3
|
||||
"Microsoft.Network/networkSecurityGroups" = 4
|
||||
"Microsoft.Network/virtualNetworks" = 5
|
||||
}
|
||||
echo "Fetching remaining resources..."
|
||||
$resources = az resource list --resource-group ghaInfraDB | ConvertFrom-Json
|
||||
|
||||
$orderedResources = $resources
|
||||
| Sort-Object @{
|
||||
Expression = {$resourceOrderRemovalOrder[$_.type]}
|
||||
Descending = $False
|
||||
}
|
||||
|
||||
echo "Deleting remaining resources..."
|
||||
$orderedResources | ForEach-Object {
|
||||
az resource delete --resource-group ghaInfraDB --ids $_.id --verbose
|
||||
}
|
||||
|
||||
echo "Logout from Azure..."
|
||||
az logout
|
Loading…
Reference in a new issue