By using a concurrency group called "duplicati-ci-livetests' the goal so to avoid having issues with multiple PRs triggering the live tests in parallel which causes false-fails on tests because they share credentials for cloud provided backends and running in parallel during tests causes file conflicts.
363 lines
13 KiB
YAML
363 lines
13 KiB
YAML
name: Backend Live Tests
|
|
on: [pull_request, workflow_dispatch]
|
|
concurrency:
|
|
group: duplicati-ci-livetests
|
|
cancel-in-progress: false
|
|
jobs:
|
|
check_secrets:
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
s3_secrets_available: "${{ steps.check_s3.outputs.available }}"
|
|
dropbox_secrets_available: "${{ steps.check_dropbox.outputs.available }}"
|
|
azure_secrets_available: "${{ steps.check_azure.outputs.available }}"
|
|
testcontainers_secrets_available: "${{ steps.check_testcontainers.outputs.available }}"
|
|
google_secrets_available: "${{ steps.check_google.outputs.available }}"
|
|
steps:
|
|
- id: check_s3
|
|
name: Check S3 secrets
|
|
shell: bash
|
|
run: |
|
|
echo "Starting S3 secrets check..."
|
|
if [[ -n "${{ secrets.TESTCREDENTIAL_S3_BUCKETNAME }}" ]] && \
|
|
[[ -n "${{ secrets.TESTCREDENTIAL_S3_KEY }}" ]] && \
|
|
[[ -n "${{ secrets.TESTCREDENTIAL_S3_REGION }}" ]] && \
|
|
[[ -n "${{ secrets.TESTCREDENTIAL_S3_SECRET }}" ]]; then
|
|
echo "All S3 secrets found"
|
|
echo "available=true" >> $GITHUB_OUTPUT
|
|
else
|
|
echo "Missing some S3 secrets"
|
|
echo "available=false" >> $GITHUB_OUTPUT
|
|
fi
|
|
echo "S3 check completed"
|
|
- id: check_dropbox
|
|
name: Check Dropbox secrets
|
|
shell: bash
|
|
run: |
|
|
echo "Starting Dropbox secrets check..."
|
|
if [[ -n "${{ secrets.TESTCREDENTIAL_DROPBOX_FOLDER }}" ]] && \
|
|
[[ -n "${{ secrets.TESTCREDENTIAL_DROPBOX_TOKEN }}" ]]; then
|
|
echo "All Dropbox secrets found"
|
|
echo "available=true" >> $GITHUB_OUTPUT
|
|
else
|
|
echo "Missing some Dropbox secrets"
|
|
echo "available=false" >> $GITHUB_OUTPUT
|
|
fi
|
|
echo "Dropbox check completed"
|
|
- id: check_azure
|
|
name: Check Azure secrets
|
|
shell: bash
|
|
run: |
|
|
echo "Starting Azure secrets check..."
|
|
if [[ -n "${{ secrets.TESTCREDENTIAL_AZURE_ACCOUNTNAME }}" ]] && \
|
|
[[ -n "${{ secrets.TESTCREDENTIAL_AZURE_ACCESSKEY }}" ]] && \
|
|
[[ -n "${{ secrets.TESTCREDENTIAL_AZURE_CONTAINERNAME }}" ]]; then
|
|
echo "All Azure secrets found"
|
|
echo "available=true" >> $GITHUB_OUTPUT
|
|
else
|
|
echo "Missing some Azure secrets"
|
|
echo "available=false" >> $GITHUB_OUTPUT
|
|
fi
|
|
echo "Azure check completed"
|
|
- id: check_testcontainers
|
|
name: Check TestContainers secret
|
|
shell: bash
|
|
run: |
|
|
echo "Starting TestContainers secrets check..."
|
|
if [[ -n "${{ secrets.TC_CLOUD_TOKEN }}" ]]; then
|
|
echo "All TestContainers secrets found"
|
|
echo "available=true" >> $GITHUB_OUTPUT
|
|
else
|
|
echo "Missing TestContainers token"
|
|
echo "available=false" >> $GITHUB_OUTPUT
|
|
fi
|
|
echo "Azure check completed"
|
|
|
|
- id: check_google
|
|
name: Check Google secrets
|
|
shell: bash
|
|
run: |
|
|
echo "Starting Google secrets check..."
|
|
if [[ -n "${{ secrets.TESTCREDENTIAL_GOOGLEDRIVE_TOKEN }}" ]] && \
|
|
[[ -n "${{ secrets.TESTCREDENTIAL_GOOGLEDRIVE_FOLDER }}" ]]; then
|
|
echo "All Google secrets found"
|
|
echo "available=true" >> $GITHUB_OUTPUT
|
|
else
|
|
echo "Missing some Google secrets"
|
|
echo "available=false" >> $GITHUB_OUTPUT
|
|
fi
|
|
echo "Google check completed"
|
|
|
|
- name: Debug Output
|
|
shell: bash
|
|
run: |
|
|
echo "S3 Available: ${{ steps.check_s3.outputs.available }}"
|
|
echo "Dropbox Available: ${{ steps.check_dropbox.outputs.available }}"
|
|
echo "TestContainers Available: ${{ steps.check_testcontainers.outputs.available }}"
|
|
echo "Google Available: ${{ steps.check_google.outputs.available }}"
|
|
test_ftp:
|
|
needs: check_secrets
|
|
if: needs.check_secrets.outputs.testcontainers_secrets_available == 'true'
|
|
name: FTP Tests
|
|
runs-on: "${{ matrix.os }}"
|
|
strategy:
|
|
fail-fast: false
|
|
max-parallel: 1
|
|
matrix:
|
|
os:
|
|
- ubuntu-latest
|
|
- windows-latest
|
|
- macos-latest
|
|
steps:
|
|
- name: Set up .NET
|
|
uses: actions/setup-dotnet@v4
|
|
with:
|
|
dotnet-version: 8.x
|
|
- name: Checkout source
|
|
uses: actions/checkout@v4
|
|
- name: Restore NuGet dependencies
|
|
run: >-
|
|
dotnet restore
|
|
LiveTests/Duplicati.Backend.Tests/Duplicati.Backend.Tests.sln
|
|
- name: Build project
|
|
run: >-
|
|
dotnet build --no-restore
|
|
LiveTests/Duplicati.Backend.Tests/Duplicati.Backend.Tests.sln
|
|
- name: Setup Testcontainers Cloud Client
|
|
uses: atomicjar/testcontainers-cloud-setup-action@v1
|
|
with:
|
|
token: "${{ secrets.TC_CLOUD_TOKEN }}"
|
|
- name: Run FTP tests
|
|
env:
|
|
TC_CLOUD_TOKEN: "${{ secrets.TC_CLOUD_TOKEN }}"
|
|
run: >-
|
|
dotnet test --no-build --filter="ClassName~FtpTests"
|
|
--logger:"console;verbosity=detailed"
|
|
LiveTests/Duplicati.Backend.Tests/Duplicati.Backend.Tests.sln
|
|
test_s3:
|
|
needs: check_secrets
|
|
if: needs.check_secrets.outputs.s3_secrets_available == 'true'
|
|
name: S3 Tests
|
|
runs-on: "${{ matrix.os }}"
|
|
strategy:
|
|
max-parallel: 1
|
|
fail-fast: false
|
|
matrix:
|
|
os:
|
|
- ubuntu-latest
|
|
- windows-latest
|
|
- macos-latest
|
|
steps:
|
|
- name: Set up .NET
|
|
uses: actions/setup-dotnet@v4
|
|
with:
|
|
dotnet-version: 8.x
|
|
- name: Checkout source
|
|
uses: actions/checkout@v4
|
|
- name: Restore NuGet dependencies
|
|
run: >-
|
|
dotnet restore
|
|
LiveTests/Duplicati.Backend.Tests/Duplicati.Backend.Tests.sln
|
|
- name: Build project
|
|
run: >-
|
|
dotnet build --no-restore
|
|
LiveTests/Duplicati.Backend.Tests/Duplicati.Backend.Tests.sln
|
|
- name: Run S3 tests
|
|
env:
|
|
TC_CLOUD_TOKEN: "${{ secrets.TC_CLOUD_TOKEN }}"
|
|
TESTCREDENTIAL_S3_BUCKETNAME: "${{ secrets.TESTCREDENTIAL_S3_BUCKETNAME }}"
|
|
TESTCREDENTIAL_S3_KEY: "${{ secrets.TESTCREDENTIAL_S3_KEY }}"
|
|
TESTCREDENTIAL_S3_REGION: "${{ secrets.TESTCREDENTIAL_S3_REGION }}"
|
|
TESTCREDENTIAL_S3_SECRET: "${{ secrets.TESTCREDENTIAL_S3_SECRET }}"
|
|
run: >-
|
|
dotnet test --no-build --filter="ClassName~S3Tests"
|
|
--logger:"console;verbosity=detailed"
|
|
LiveTests/Duplicati.Backend.Tests/Duplicati.Backend.Tests.sln
|
|
test_azure:
|
|
needs: check_secrets
|
|
if: needs.check_secrets.outputs.azure_secrets_available == 'true'
|
|
name: Azure Tests
|
|
runs-on: "${{ matrix.os }}"
|
|
strategy:
|
|
max-parallel: 1
|
|
fail-fast: false
|
|
matrix:
|
|
os:
|
|
- ubuntu-latest
|
|
- windows-latest
|
|
- macos-latest
|
|
steps:
|
|
- name: Set up .NET
|
|
uses: actions/setup-dotnet@v4
|
|
with:
|
|
dotnet-version: 8.x
|
|
- name: Checkout source
|
|
uses: actions/checkout@v4
|
|
- name: Restore NuGet dependencies
|
|
run: >-
|
|
dotnet restore
|
|
LiveTests/Duplicati.Backend.Tests/Duplicati.Backend.Tests.sln
|
|
- name: Build project
|
|
run: >-
|
|
dotnet build --no-restore
|
|
LiveTests/Duplicati.Backend.Tests/Duplicati.Backend.Tests.sln
|
|
- name: Run Azure tests
|
|
env:
|
|
TESTCREDENTIAL_AZURE_ACCOUNTNAME: "${{ secrets.TESTCREDENTIAL_AZURE_ACCOUNTNAME }}"
|
|
TESTCREDENTIAL_AZURE_ACCESSKEY: "${{ secrets.TESTCREDENTIAL_AZURE_ACCESSKEY }}"
|
|
TESTCREDENTIAL_AZURE_CONTAINERNAME: "${{ secrets.TESTCREDENTIAL_AZURE_CONTAINERNAME }}"
|
|
run: >-
|
|
dotnet test --no-build --filter="ClassName~AzureTests"
|
|
--logger:"console;verbosity=detailed"
|
|
LiveTests/Duplicati.Backend.Tests/Duplicati.Backend.Tests.sln
|
|
test_webdav:
|
|
needs: check_secrets
|
|
if: needs.check_secrets.outputs.testcontainers_secrets_available == 'true'
|
|
name: Webdav Tests
|
|
runs-on: "${{ matrix.os }}"
|
|
strategy:
|
|
max-parallel: 1
|
|
fail-fast: false
|
|
matrix:
|
|
os:
|
|
- ubuntu-latest
|
|
- windows-latest
|
|
- macos-latest
|
|
steps:
|
|
- name: Set up .NET
|
|
uses: actions/setup-dotnet@v4
|
|
with:
|
|
dotnet-version: 8.x
|
|
- name: Checkout source
|
|
uses: actions/checkout@v4
|
|
- name: Restore NuGet dependencies
|
|
run: >-
|
|
dotnet restore
|
|
LiveTests/Duplicati.Backend.Tests/Duplicati.Backend.Tests.sln
|
|
- name: Build project
|
|
run: >-
|
|
dotnet build --no-restore
|
|
LiveTests/Duplicati.Backend.Tests/Duplicati.Backend.Tests.sln
|
|
- name: Setup Testcontainers Cloud Client
|
|
uses: atomicjar/testcontainers-cloud-setup-action@v1
|
|
with:
|
|
token: "${{ secrets.TC_CLOUD_TOKEN }}"
|
|
- name: Run Webdav tests
|
|
env:
|
|
TC_CLOUD_TOKEN: "${{ secrets.TC_CLOUD_TOKEN }}"
|
|
run: >-
|
|
dotnet test --no-build --filter="ClassName~WebDavTests"
|
|
--logger:"console;verbosity=detailed"
|
|
LiveTests/Duplicati.Backend.Tests/Duplicati.Backend.Tests.sln
|
|
test_dropbox:
|
|
needs: check_secrets
|
|
if: needs.check_secrets.outputs.dropbox_secrets_available == 'true'
|
|
name: DropBox Tests
|
|
runs-on: "${{ matrix.os }}"
|
|
strategy:
|
|
max-parallel: 1
|
|
fail-fast: false
|
|
matrix:
|
|
os:
|
|
- ubuntu-latest
|
|
- windows-latest
|
|
- macos-latest
|
|
steps:
|
|
- name: Set up .NET
|
|
uses: actions/setup-dotnet@v4
|
|
with:
|
|
dotnet-version: 8.x
|
|
- name: Checkout source
|
|
uses: actions/checkout@v4
|
|
- name: Restore NuGet dependencies
|
|
run: >-
|
|
dotnet restore
|
|
LiveTests/Duplicati.Backend.Tests/Duplicati.Backend.Tests.sln
|
|
- name: Build project
|
|
run: >-
|
|
dotnet build --no-restore
|
|
LiveTests/Duplicati.Backend.Tests/Duplicati.Backend.Tests.sln
|
|
- name: Run Dropbox tests
|
|
env:
|
|
TC_CLOUD_TOKEN: "${{ secrets.TC_CLOUD_TOKEN }}"
|
|
TESTCREDENTIAL_DROPBOX_FOLDER: "${{ secrets.TESTCREDENTIAL_DROPBOX_FOLDER }}"
|
|
TESTCREDENTIAL_DROPBOX_TOKEN: "${{ secrets.TESTCREDENTIAL_DROPBOX_TOKEN }}"
|
|
run: >-
|
|
dotnet test --no-build --filter="ClassName~DropBoxTests"
|
|
--logger:"console;verbosity=detailed"
|
|
LiveTests/Duplicati.Backend.Tests/Duplicati.Backend.Tests.sln
|
|
test_ssh:
|
|
needs: check_secrets
|
|
if: needs.check_secrets.outputs.testcontainers_secrets_available == 'true'
|
|
name: SSH Tests
|
|
runs-on: "${{ matrix.os }}"
|
|
strategy:
|
|
fail-fast: false
|
|
max-parallel: 1
|
|
matrix:
|
|
os:
|
|
- ubuntu-latest
|
|
- windows-latest
|
|
- macos-latest
|
|
steps:
|
|
- name: Set up .NET
|
|
uses: actions/setup-dotnet@v4
|
|
with:
|
|
dotnet-version: 8.x
|
|
- name: Checkout source
|
|
uses: actions/checkout@v4
|
|
- name: Restore NuGet dependencies
|
|
run: >-
|
|
dotnet restore
|
|
LiveTests/Duplicati.Backend.Tests/Duplicati.Backend.Tests.sln
|
|
- name: Build project
|
|
run: >-
|
|
dotnet build --no-restore
|
|
LiveTests/Duplicati.Backend.Tests/Duplicati.Backend.Tests.sln
|
|
- name: Setup Testcontainers Cloud Client
|
|
uses: atomicjar/testcontainers-cloud-setup-action@v1
|
|
with:
|
|
token: "${{ secrets.TC_CLOUD_TOKEN }}"
|
|
- name: Run SSH tests
|
|
env:
|
|
TC_CLOUD_TOKEN: "${{ secrets.TC_CLOUD_TOKEN }}"
|
|
run: >-
|
|
dotnet test --no-build --filter="ClassName~SshTests"
|
|
--logger:"console;verbosity=detailed"
|
|
LiveTests/Duplicati.Backend.Tests/Duplicati.Backend.Tests.sln
|
|
test_googledrive:
|
|
needs: check_secrets
|
|
if: needs.check_secrets.outputs.google_secrets_available == 'true'
|
|
name: Google Drive Tests
|
|
runs-on: "${{ matrix.os }}"
|
|
strategy:
|
|
max-parallel: 1
|
|
fail-fast: false
|
|
matrix:
|
|
os:
|
|
- ubuntu-latest
|
|
- windows-latest
|
|
- macos-latest
|
|
steps:
|
|
- name: Set up .NET
|
|
uses: actions/setup-dotnet@v4
|
|
with:
|
|
dotnet-version: 8.x
|
|
- name: Checkout source
|
|
uses: actions/checkout@v4
|
|
- name: Restore NuGet dependencies
|
|
run: >-
|
|
dotnet restore
|
|
LiveTests/Duplicati.Backend.Tests/Duplicati.Backend.Tests.sln
|
|
- name: Build project
|
|
run: >-
|
|
dotnet build --no-restore
|
|
LiveTests/Duplicati.Backend.Tests/Duplicati.Backend.Tests.sln
|
|
- name: Run Dropbox tests
|
|
env:
|
|
TESTCREDENTIAL_GOOGLEDRIVE_TOKEN: "${{ secrets.TESTCREDENTIAL_GOOGLEDRIVE_TOKEN }}"
|
|
TESTCREDENTIAL_GOOGLEDRIVE_FOLDER: "${{ secrets.TESTCREDENTIAL_GOOGLEDRIVE_FOLDER }}"
|
|
run: >-
|
|
dotnet test --no-build --filter="ClassName~GoogleDriveTests"
|
|
--logger:"console;verbosity=detailed"
|
|
LiveTests/Duplicati.Backend.Tests/Duplicati.Backend.Tests.sln
|