Integration tests #14
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/setup@v0.13.4 | |
with: | |
versionSpec: '5.x' | |
- name: Determine Version | |
id: gitversion | |
uses: gittools/actions/gitversion/execute@v0.13.4 | |
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" | |
] | |
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: test-infra/terraform/test-environment | |
defaults: | |
run: | |
working-directory: ${{ env.tf_actions_working_dir }} | |
steps: | |
- 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 | |
- id: plan | |
run: terraform plan -no-color | |
#run: terraform plan -no-color | |
- run: echo ${{ steps.plan.outputs.stdout }} | |
- run: echo ${{ steps.plan.outputs.stderr }} | |
- run: echo ${{ steps.plan.outputs.exitcode }} | |
integration-test: | |
environment: integration-tests | |
name: Test | |
needs: | |
- set-version-number | |
- build-standalone | |
continue-on-error: true | |
strategy: | |
fail-fast: false | |
# We could really like to: | |
# - Start each database (on another host, using Docker, or other means, e.g. Azure SQL, etc | |
# - On all architectures available (windows-latest, linux-latest, macos-latest, and macos-14), | |
# - Run command-line tests against each database. | |
# | |
# This way, we can test against all variations of each database too, e.g. Azure SQL, SQL Server "on prem" (in docker), | |
# hosted Oracle databases, aws databases, etc. But we need to find a way to provision these databases both very fast, | |
# and cheap, for each one. | |
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 Conn1" | |
project: MariaDB | |
connectionstring: "DbConn MariaDB Conn1" | |
- 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-x64 | |
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 | |