Workflow file for this run
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
# Heavyweight integration tests | |
name: Integration tests | |
on: | |
push: | |
branches: | |
- main | |
- chore/separate-cmdline-tests-step | |
paths-ignore: | |
- docs/ | |
workflow_dispatch: | |
permissions: | |
id-token: write # This is required for requesting the JWT | |
contents: read # This is required for actions/checkout | |
jobs: | |
set-version-number: | |
name: Set version number | |
runs-on: ubuntu-latest | |
outputs: | |
nuGetVersion: ${{ steps.gitversion.outputs.nuGetVersionV2 }} | |
semVer: ${{ steps.gitversion.outputs.fullSemVer }} | |
is-release: ${{ steps.gitversion.outputs.CommitsSinceVersionSource == 0 }} | |
#is-release: 'true' | |
steps: | |
- name: Setup .NET 8 | |
uses: actions/setup-dotnet@v4 | |
with: | |
dotnet-version: 8.0.x | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Install GitVersion | |
uses: gittools/actions/gitversion/[email protected] | |
with: | |
versionSpec: '5.x' | |
- name: Determine Version | |
id: gitversion | |
uses: gittools/actions/gitversion/[email protected] | |
build-netcore-tool: | |
needs: set-version-number | |
name: Build .NET Core (global) tool | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup .NET 8 | |
uses: actions/setup-dotnet@v4 | |
with: | |
dotnet-version: 8.0.x | |
- name: Restore dependencies | |
run: dotnet restore | |
- name: Build | |
run: dotnet pack ./src/grate/grate.csproj -p:SelfContained=false -p:PackAsTool=true -p:PackageOutputPath=/tmp/grate/nupkg | |
env: | |
VERSION: ${{ needs.set-version-number.outputs.nuGetVersion }} | |
- name: Upload published tool artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: grate-dotnet-tool-${{ needs.set-version-number.outputs.nuGetVersion }} | |
path: /tmp/grate/nupkg/* | |
build-standalone: | |
name: Build cli | |
needs: set-version-number | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
arch: | |
- win-x64 | |
# - win-x86 | |
# - win-arm64 | |
# - linux-musl-x64 | |
# - linux-musl-arm64 | |
- linux-x64 | |
- linux-arm64 | |
- osx-x64 | |
# arch: [ "win-x64", "win-x86", "win-arm64", | |
# "linux-musl-x64", "linux-musl-arm64", "linux-x64", "linux-arm64", | |
# "osx-x64" | |
# ] | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup .NET 8 | |
uses: actions/setup-dotnet@v4 | |
with: | |
dotnet-version: 8.0.x | |
- name: Publish self-contained ${{ matrix.arch }} | |
run: dotnet publish ./src/grate/grate.csproj -f net8.0 -r ${{ matrix.arch }} -c release --self-contained -p:SelfContained=true -o ./publish/${{ matrix.arch }}/self-contained | |
env: | |
VERSION: ${{ needs.set-version-number.outputs.nuGetVersion }} | |
- name: Upload self-contained ${{ matrix.arch }} | |
uses: actions/upload-artifact@v4 | |
with: | |
name: grate-${{ matrix.arch }}-self-contained-${{ needs.set-version-number.outputs.nuGetVersion }} | |
path: ./publish/${{ matrix.arch }}/self-contained/* | |
build-standalone-mac-arm64: | |
name: Build cli | |
needs: set-version-number | |
# Use macos-14 to build osx-arm64, it runs on M1, see | |
# https://github.blog/changelog/2024-01-30-github-actions-introducing-the-new-m1-macos-runner-available-to-open-source/ | |
# | |
# I've earlier had problems with that the trimmed, self-contained binary for osx-arm64 that was built on Linux | |
# did not work when opened on an actual mac with arm64. | |
runs-on: macos-14 | |
strategy: | |
matrix: | |
arch: [ "osx-arm64" ] | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup .NET 8 | |
uses: actions/setup-dotnet@v4 | |
with: | |
dotnet-version: 8.0.x | |
- name: Publish self-contained ${{ matrix.arch }} | |
run: dotnet publish ./src/grate/grate.csproj -f net8.0 -r ${{ matrix.arch }} -c release --self-contained -p:SelfContained=true -o ./publish/${{ matrix.arch }}/self-contained | |
env: | |
VERSION: ${{ needs.set-version-number.outputs.nuGetVersion }} | |
- name: Upload self-contained ${{ matrix.arch }} | |
uses: actions/upload-artifact@v4 | |
with: | |
name: grate-${{ matrix.arch }}-self-contained-${{ needs.set-version-number.outputs.nuGetVersion }} | |
path: ./publish/${{ matrix.arch }}/self-contained/* | |
setup-test-environment: | |
name: Set up test enviroment | |
environment: integration-tests | |
runs-on: ubuntu-latest | |
env: | |
tf_actions_working_dir: "${{ github.workspace }}/test-infra/terraform/test-environment" | |
ARM_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} | |
ARM_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} | |
ARM_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }} | |
defaults: | |
run: | |
working-directory: ${{ env.tf_actions_working_dir }} | |
outputs: | |
mariadb_connection_string: ${{ steps.show.outputs.mariadb_connstr }} | |
mariadb_test_value: ${{ steps.show.outputs.mariadb_test_value }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Log into Azure | |
uses: azure/login@v1 | |
with: | |
client-id: ${{ secrets.AZURE_CLIENT_ID }} | |
tenant-id: ${{ secrets.AZURE_TENANT_ID }} | |
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} | |
- name: Show account info | |
run: > | |
az account show | |
- uses: hashicorp/setup-terraform@v3 | |
- run: terraform init | |
- name: Terraform Validate | |
#run: terraform validate -no-color | |
run: terraform validate | |
- name: Terraform plan | |
id: plan | |
#run: terraform plan -no-color -input=false | |
run: terraform plan -input=false | |
# - run: echo ${{ steps.plan.outputs.stdout }} | |
# - run: echo ${{ steps.plan.outputs.stderr }} | |
# - run: echo ${{ steps.plan.outputs.exitcode }} | |
- name: Exit on invalid Terraform plan | |
if: steps.plan.outcome == 'failure' | |
run: exit 1 | |
- name: Terraform Apply | |
id: apply | |
run: terraform apply -auto-approve | |
- name: Get terraform values | |
id: show | |
run: | | |
terraform show -json > state.json | |
HOST=$(cat state.json | jq -r '.values.outputs | ."mariadb-fqdn".value') | |
PW=$(cat state.json | jq -r '.values.outputs | ."mariadb-admin-password".value') | |
CONNSTR="Server=${HOST};Port=3306;Database=mysql;Uid=root;Pwd=${PW}" | |
echo "mariadb_connstr='${CONNSTR}'" | |
echo "mariadb_connstr='${CONNSTR}'" >> "$GITHUB_OUTPUT" | |
echo "mariadb_test_value=jalla" >> "$GITHUB_OUTPUT" | |
# - run: echo ${{ steps.apply.outputs.stdout }} | |
# - run: echo ${{ steps.apply.outputs.stderr }} | |
# - run: echo ${{ steps.apply.outputs.exitcode }} | |
integration-test: | |
environment: integration-tests | |
name: Test | |
needs: | |
- set-version-number | |
- build-standalone | |
- setup-test-environment | |
continue-on-error: true | |
strategy: | |
fail-fast: false | |
matrix: | |
database: | |
# - name: SqlServer Conn1 | |
# project: SqlServer | |
# connectionstring: "DbConn SqlServer Conn1" | |
# - name: SqlServer Conn2 | |
# project: SqlServer | |
# connectionstring: "DbConn SqlServer Conn2" | |
# - name: "PostgreSQL Conn1" | |
# project: PostgreSQL | |
# connectionstring: "DbConn PostgreSQL Conn1" | |
# - name: "PostgreSQL Conn2" | |
# project: PostgreSQL | |
# connectionstring: "DbConn PostgreSQL Conn2" | |
- name: "MariaDB ACA" | |
project: MariaDB | |
connectionstring: "AAA: ${{ needs.setup-test-environment.outputs.mariadb_test_value }}" | |
# - name: "MariaDB Conn2" | |
# project: MariaDB | |
# connectionstring: "DbConn MariaDB Conn2" | |
# - name: "Sqlite Conn1" | |
# project: Sqlite | |
# connectionstring: "DbConn Sqlite Conn1" | |
# - name: "Sqlite Conn2" | |
# project: Sqlite | |
# connectionstring: "DbConn Sqlite Conn2" | |
# - name: "Oracle Conn1" | |
# project: Oracle | |
# connectionstring: "DbConn Oracle Conn1" | |
# - name: "Oracle Conn2" | |
# project: Oracle | |
# connectionstring: "DbConn Oracle Conn2" | |
os: | |
- name: windows-latest | |
arch: win-x64 | |
executable: grate.exe | |
- name: ubuntu-latest | |
arch: linux-x64 | |
executable: grate | |
- name: macos-latest | |
arch: osx-x64 | |
executable: grate | |
# macos-14 is M1 (arm64) | |
- name: macos-14 | |
arch: osx-arm64 | |
executable: grate | |
runs-on: ${{ matrix.os.name }} | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/download-artifact@v4 | |
with: | |
name: grate-${{ matrix.os.arch }}-self-contained-${{ needs.set-version-number.outputs.nuGetVersion }} | |
path: executables/${{ matrix.os.arch }} | |
- name: Setup .NET 8 | |
uses: actions/setup-dotnet@v4 | |
with: | |
dotnet-version: 8.0.x | |
- name: chmod u+x | |
run: chmod u+x $GrateExecutablePath | |
if: ${{ matrix.os.arch != 'win-x64' }} | |
env: | |
GrateExecutablePath: ${{ github.workspace }}/executables/${{ matrix.os.arch }}/${{ matrix.os.executable }} | |
- name: Log into Azure | |
uses: azure/login@v1 | |
with: | |
client-id: ${{ secrets.AZURE_CLIENT_ID }} | |
tenant-id: ${{ secrets.AZURE_TENANT_ID }} | |
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} | |
- name: Test | |
run: > | |
dotnet test | |
unittests/CommandLine/CommandLine.${{ matrix.database.project }} | |
--logger:"xunit;LogFilePath=/tmp/test-results/${{ matrix.os.arch }}/CommandLine.${{ matrix.database.project }}.xml" -- | |
-MaxCpuCount 2 | |
env: | |
LogLevel: Warning | |
GrateExecutablePath: ${{ github.workspace }}/executables/${{ matrix.os.arch }}/${{ matrix.os.executable }} | |
GrateTestConfig__AdminConnectionString: ${{ matrix.database.connectionstring }} | |
TZ: UTC | |
teardown-test-environment: | |
name: Tear down test enviroment | |
environment: integration-tests | |
runs-on: ubuntu-latest | |
needs: integration-test | |
#if: always() | |
if: false | |
env: | |
tf_actions_working_dir: "${{ github.workspace }}/test-infra/terraform/test-environment" | |
ARM_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} | |
ARM_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} | |
ARM_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }} | |
defaults: | |
run: | |
working-directory: ${{ env.tf_actions_working_dir }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Log into Azure | |
uses: azure/login@v1 | |
with: | |
client-id: ${{ secrets.AZURE_CLIENT_ID }} | |
tenant-id: ${{ secrets.AZURE_TENANT_ID }} | |
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} | |
- name: Show account info | |
run: > | |
az account show | |
- uses: hashicorp/setup-terraform@v3 | |
- run: terraform init | |
- name: Terraform Validate | |
#run: terraform validate -no-color | |
run: terraform validate | |
- id: plan-destroy | |
#run: terraform plan -destroy -no-color -input=false | |
run: terraform plan -destroy -input=false | |
- name: Terraform Plan Status | |
if: steps.plan.outcome == 'failure' | |
run: exit 1 | |
- name: Terraform Destroy | |
#run: terraform apply -destroy -auto-approve | |
run: terraform destroy -auto-approve | |