fix(subscriber-dummy): make crate version valid by adding the patch
part
#2720
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
name: CI | |
on: | |
push: | |
branches: | |
- master | |
pull_request: | |
types: [ opened, synchronize, reopened ] | |
workflow_dispatch: | |
workflow_call: | |
inputs: | |
ref: | |
description: "The commit SHA to build" | |
required: false | |
type: string | |
jobs: | |
preflight: | |
name: preflight | |
runs-on: ubuntu-20.04 | |
outputs: | |
ref: ${{ steps.get-commit.outputs.ref }} | |
version: ${{ steps.get-version.outputs.version }} | |
rust-profile: ${{ steps.rust-profile.outputs.rust-profile }} | |
jetsocat-build-matrix: ${{ steps.setup-matrix.outputs.jetsocat-build-matrix }} | |
gateway-build-matrix: ${{ steps.setup-matrix.outputs.gateway-build-matrix }} | |
steps: | |
- name: Setup matrix | |
id: setup-matrix | |
shell: pwsh | |
run: | | |
$Jobs = @() | |
$Archs = @( 'x86_64', 'arm64' ) | |
$Platforms = @( 'linux', 'windows' ) | |
$Platforms | ForEach-Object { | |
$Runner = switch ($_) { 'windows' { 'windows-2022' } 'linux' { 'ubuntu-20.04' } } | |
foreach ($Arch in $Archs) { | |
if ($Arch -Eq 'arm64' -And $_ -Eq 'windows') { | |
continue | |
} | |
$Jobs += @{ | |
arch = $Arch | |
os = $_ | |
runner = $Runner } | |
} | |
} | |
$GatewayMatrix = ConvertTo-JSON $Jobs -Compress | |
echo "gateway-build-matrix=$GatewayMatrix" >> $Env:GITHUB_OUTPUT | |
$Jobs = @() | |
$Platforms += 'macos' | |
$Platforms | ForEach-Object { | |
$Runner = switch ($_) { 'windows' { 'windows-2022' } 'macos' { 'macos-11' } 'linux' { 'ubuntu-20.04' } } | |
foreach ($Arch in $Archs) { | |
$Jobs += @{ | |
arch = $Arch | |
os = $_ | |
runner = $Runner } | |
} | |
} | |
$JetsocatMatrix = ConvertTo-JSON $Jobs -Compress | |
echo "jetsocat-build-matrix=$JetsocatMatrix" >> $Env:GITHUB_OUTPUT | |
## The SHA to build might be passed via workflow_call, otherwise the current commit is used | |
- name: Get commit | |
id: get-commit | |
shell: pwsh | |
run: | | |
$Ref = '${{ inputs.ref }}' | |
if (-Not $Ref) { | |
$Ref = '${{ github.sha }}' | |
} | |
echo "ref=$Ref" >> $Env:GITHUB_OUTPUT | |
- name: Checkout ${{ github.repository }} | |
uses: actions/checkout@v4 | |
with: | |
ref: ${{ steps.get-commit.outputs.ref }} | |
- name: Get version | |
id: get-version | |
shell: pwsh | |
run: | | |
$Version = Get-Content VERSION -TotalCount 1 | |
echo "version=$Version" >> $Env:GITHUB_OUTPUT | |
- name: Check formatting | |
run: | | |
cargo fmt --all -- --check | |
if ! [ $? -eq 0 ] ; then | |
echo "::error::Bad formatting, please run 'cargo +stable fmt --all'" | |
exit 1 | |
fi | |
- name: Configure rust profile | |
id: rust-profile | |
shell: pwsh | |
run: | | |
$CargoProfile = "release" | |
if ("${{ github.ref }}" -Eq "refs/heads/master") { | |
echo "::notice::Building production profile" | |
$CargoProfile = "production" | |
} | |
echo "rust-profile=$CargoProfile" >> $Env:GITHUB_OUTPUT | |
- name: Upload version artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: version | |
path: VERSION | |
test: | |
name: test [${{ matrix.os }} ${{ matrix.arch }}] | |
runs-on: ${{ matrix.runner }} | |
needs: preflight | |
strategy: | |
matrix: | |
arch: [ x86_64 ] | |
os: [ windows, linux ] | |
include: | |
- os: windows | |
runner: windows-2022 | |
- os: linux | |
runner: ubuntu-20.04 | |
steps: | |
- name: Checkout ${{ github.repository }} | |
uses: actions/checkout@v4 | |
with: | |
ref: ${{ needs.preflight.outputs.ref }} | |
- name: Configure Linux runner | |
if: matrix.os == 'linux' | |
run: | | |
sudo apt-get update | |
sudo apt-get -o Acquire::Retries=3 install libsystemd-dev | |
- name: Test | |
shell: pwsh | |
run: ./ci/tlk.ps1 test -Platform ${{ matrix.os }} -Architecture ${{ matrix.arch }} -CargoProfile ${{ needs.preflight.outputs.rust-profile }} | |
jetsocat: | |
name: jetsocat [${{ matrix.os }} ${{ matrix.arch }}] | |
runs-on: ${{ matrix.runner }} | |
needs: preflight | |
strategy: | |
matrix: | |
include: ${{ fromJson(needs.preflight.outputs.jetsocat-build-matrix) }} | |
steps: | |
- name: Checkout ${{ github.repository }} | |
uses: actions/checkout@v4 | |
with: | |
ref: ${{ needs.preflight.outputs.ref }} | |
- name: Configure Linux runner | |
if: matrix.os == 'linux' | |
run: | | |
sudo apt-get update | |
sudo apt-get -o Acquire::Retries=3 install python3-wget python3-setuptools | |
- name: Configure Linux (arm) runner | |
if: matrix.os == 'linux' && matrix.arch == 'arm64' | |
run: | | |
sudo dpkg --add-architecture arm64 | |
sudo apt-get -o Acquire::Retries=3 install -qy binutils-aarch64-linux-gnu gcc-aarch64-linux-gnu g++-aarch64-linux-gnu qemu-user | |
rustup target add aarch64-unknown-linux-gnu | |
echo "STRIP_EXECUTABLE=aarch64-linux-gnu-strip" >> $GITHUB_ENV | |
- name: Fix ring dependency for Windows ARM64 | |
if: runner.os == 'Windows' && matrix.arch == 'arm64' | |
shell: pwsh | |
run: | | |
rustup target add aarch64-pc-windows-msvc | |
'ring = { git = "https://github.com/awakecoding/ring", branch = "0.16.20_alpha" }' | % { | |
Add-Content -Path "./Cargo.toml" -Value $_ | |
} | |
$VSINSTALLDIR = $(vswhere.exe -latest -requires Microsoft.VisualStudio.Component.VC.Llvm.Clang -property installationPath) | |
$VCINSTALLDIR = Join-Path $VSINSTALLDIR "VC" | |
$LLVM_ROOT = Join-Path $VCINSTALLDIR "Tools\Llvm\x64" | |
echo "PATH=$Env:PATH;${LLVM_ROOT}\bin" >> $Env:GITHUB_ENV | |
- name: Configure macOS (arm) runner | |
if: matrix.os == 'macos' && matrix.arch == 'arm64' | |
run: | | |
sudo rm -rf /Library/Developer/CommandLineTools | |
rustup target add aarch64-apple-darwin | |
- name: Build | |
id: build | |
shell: pwsh | |
run: | | |
$StagingPath = Join-Path $Env:RUNNER_TEMP "staging" | |
$TargetOutputPath = Join-Path $StagingPath ${{ matrix.os }} ${{ matrix.arch }} | |
$ExecutableFileName = 'jetsocat_${{ runner.os }}_${{ needs.preflight.outputs.version }}_${{ matrix.arch }}' | |
if ($Env:RUNNER_OS -eq "Windows") { | |
$ExecutableFileName = "$($ExecutableFileName).exe" | |
$Env:CARGO_NO_DEFAULT_FEATURES = "true" | |
$Env:CARGO_FEATURES = "native-tls" | |
} | |
$Env:TARGET_OUTPUT_PATH = $TargetOutputPath | |
$Env:JETSOCAT_EXECUTABLE = Join-Path $TargetOutputPath $ExecutableFileName | |
$Env:CARGO_PACKAGE = "jetsocat" | |
./ci/tlk.ps1 build -Platform ${{ matrix.os }} -Architecture ${{ matrix.arch }} -CargoProfile ${{ needs.preflight.outputs.rust-profile }} | |
echo "staging-path=$StagingPath" >> $Env:GITHUB_OUTPUT | |
- name: Upload artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: jetsocat-${{ matrix.os }}-${{ matrix.arch }} | |
path: ${{ steps.build.outputs.staging-path }} | |
jetsocat-merge: | |
name: jetsocat merge artifacts | |
runs-on: ubuntu-latest | |
needs: [preflight, jetsocat] | |
steps: | |
- name: Merge Artifacts | |
uses: actions/upload-artifact/merge@v4 | |
with: | |
name: jetsocat | |
pattern: jetsocat-* | |
delete-merged: true | |
jetsocat-lipo: | |
name: jetsocat macos universal | |
runs-on: ubuntu-20.04 | |
needs: [preflight, jetsocat, jetsocat-merge] | |
steps: | |
- uses: actions/download-artifact@v4 | |
with: | |
name: jetsocat | |
- name: Configure runner | |
run: | | |
wget -q https://github.com/awakecoding/llvm-prebuilt/releases/download/v2021.2.4/cctools-x86_64-ubuntu-20.04.tar.xz | |
tar -xf cctools-x86_64-ubuntu-20.04.tar.xz -C /tmp | |
sudo mv /tmp/cctools-x86_64-ubuntu-20.04/bin/lipo /usr/local/bin | |
rm -r cctools-x86_64-ubuntu-20.04.tar.xz | |
- name: Lipo | |
shell: pwsh | |
run: | | |
$OutputPath = Join-Path "macos" "universal" | |
New-Item -ItemType Directory -Path $OutputPath | Out-Null | |
$Binaries = Get-ChildItem -Recurse -Path "macos" -Filter "jetsocat_*" | Foreach-Object { $_.FullName } | Select -Unique | |
$LipoCmd = $(@('lipo', '-create', '-output', (Join-Path -Path $OutputPath -ChildPath "jetsocat_macOS_${{ needs.preflight.outputs.version }}_universal")) + $Binaries) -Join ' ' | |
Write-Host $LipoCmd | |
Invoke-Expression $LipoCmd | |
- name: Upload artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: jetsocat | |
path: . | |
overwrite: true | |
devolutions-gateway-web-ui: | |
name: devolutions-gateway-web-ui | |
runs-on: ubuntu-latest | |
needs: preflight | |
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository | |
steps: | |
- name: Checkout ${{ github.repository }} | |
uses: actions/checkout@v4 | |
with: | |
ref: ${{ needs.preflight.outputs.ref }} | |
- name: Check out Devolutions/actions | |
uses: actions/checkout@v4 | |
with: | |
repository: Devolutions/actions | |
ref: v1 | |
token: ${{ secrets.DEVOLUTIONSBOT_TOKEN }} | |
path: ./.github/workflows | |
- name: Get npm cache directory | |
id: npm-cache | |
run: | | |
"dir=$(npm config get cache)" >> $Env:GITHUB_OUTPUT | |
shell: pwsh | |
working-directory: webapp | |
- uses: actions/cache@v4 | |
with: | |
key: ${{ runner.os }}-node-${{ hashFiles('webapp/package-lock.json') }} | |
path: ${{ steps.npm-cache.outputs.dir }} | |
restore-keys: | | |
${{ runner.os }}-node- | |
- name: Setup .npmrc config file | |
uses: ./.github/workflows/npmrc-setup | |
with: | |
npm_token: ${{ secrets.ARTIFACTORY_NPM_TOKEN }} | |
- name: Install NPM dependencies | |
working-directory: webapp | |
run: npm ci | |
- name: Configure runner | |
shell: pwsh | |
run: npm install -g @angular/cli | |
- name: Build | |
shell: pwsh | |
working-directory: webapp | |
run: ng build | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: webapp-client | |
path: webapp/client/ | |
devolutions-gateway: | |
name: devolutions-gateway [${{ matrix.os }} ${{ matrix.arch }}] | |
runs-on: ${{ matrix.runner }} | |
needs: [preflight, devolutions-gateway-web-ui] | |
if: always() | |
strategy: | |
matrix: | |
include: ${{ fromJson(needs.preflight.outputs.gateway-build-matrix) }} | |
steps: | |
- name: Checkout ${{ github.repository }} | |
uses: actions/checkout@v4 | |
with: | |
ref: ${{ needs.preflight.outputs.ref }} | |
- name: Download webapp-client | |
uses: actions/download-artifact@v4 | |
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository | |
with: | |
name: webapp-client | |
path: webapp/client | |
- name: Load dynamic variables | |
id: load-variables | |
shell: pwsh | |
run: | | |
$PackageVersion = "${{ needs.preflight.outputs.version }}" | |
$StagingPath = Join-Path $Env:RUNNER_TEMP "staging" | |
$TargetOutputPath = Join-Path $StagingPath ${{ matrix.os }} ${{ matrix.arch }} | |
$ExecutableFileName = "DevolutionsGateway_${{ runner.os }}_${PackageVersion}_${{ matrix.arch }}" | |
if ($Env:RUNNER_OS -eq "Windows") { | |
$ExecutableFileName = "$($ExecutableFileName).exe" | |
$PackageFileName = "DevolutionsGateway-${{ matrix.arch }}-${PackageVersion}.msi" | |
$PSModuleOutputPath = Join-Path $StagingPath PowerShell | |
$DGatewayPSModulePath = Join-Path $PSModuleOutputPath DevolutionsGateway | |
$DGatewayPackage = Join-Path $TargetOutputPath $PackageFileName | |
echo "psmodule-output-path=$PSModuleOutputPath" >> $Env:GITHUB_OUTPUT | |
echo "dgateway-psmodule-output-path=$DGatewayPSModulePath" >> $Env:GITHUB_OUTPUT | |
echo "dgateway-package=$DGatewayPackage" >> $Env:GITHUB_OUTPUT | |
} | |
$DGatewayExecutable = Join-Path $TargetOutputPath $ExecutableFileName | |
echo "staging-path=$StagingPath" >> $Env:GITHUB_OUTPUT | |
echo "target-output-path=$TargetOutputPath" >> $Env:GITHUB_OUTPUT | |
echo "dgateway-executable=$DGatewayExecutable" >> $Env:GITHUB_OUTPUT | |
- name: Configure Linux runner | |
if: matrix.os == 'linux' | |
run: | | |
sudo apt-get update | |
sudo apt-get -o Acquire::Retries=3 install python3-wget python3-setuptools libsystemd-dev dh-make | |
- name: Configure Linux (arm) runner | |
if: matrix.os == 'linux' && matrix.arch == 'arm64' | |
run: | | |
sudo dpkg --add-architecture arm64 | |
sudo apt-get -o Acquire::Retries=3 install -qy binutils-aarch64-linux-gnu gcc-aarch64-linux-gnu g++-aarch64-linux-gnu qemu-user | |
rustup target add aarch64-unknown-linux-gnu | |
echo "STRIP_EXECUTABLE=aarch64-linux-gnu-strip" >> $GITHUB_ENV | |
# WiX is installed on Windows runners but not in the PATH | |
- name: Configure Windows runner | |
if: matrix.os == 'windows' | |
run: | | |
# https://github.com/actions/runner-images/issues/9667 | |
choco uninstall wixtoolset | |
choco install wixtoolset --version 3.14.0 --allow-downgrade --force | |
echo "C:\Program Files (x86)\WiX Toolset v3.14\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append | |
- name: Build | |
shell: pwsh | |
env: | |
TARGET_OUTPUT_PATH: ${{ steps.load-variables.outputs.target-output-path }} | |
DGATEWAY_EXECUTABLE: ${{ steps.load-variables.outputs.dgateway-executable }} | |
CARGO_PACKAGE: devolutions-gateway | |
run: ./ci/tlk.ps1 build -Platform ${{ matrix.os }} -Architecture ${{ matrix.arch }} -CargoProfile ${{ needs.preflight.outputs.rust-profile }} | |
- name: Build PowerShell module | |
if: matrix.os == 'windows' | |
env: | |
PSMODULE_OUTPUT_PATH: ${{ steps.load-variables.outputs.psmodule-output-path }} | |
run: .\powershell\build.ps1 | |
- name: Add msbuild to PATH | |
if: matrix.os == 'windows' | |
uses: microsoft/setup-msbuild@v2 | |
- name: Package | |
shell: pwsh | |
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository | |
env: | |
TARGET_OUTPUT_PATH: ${{ steps.load-variables.outputs.target-output-path }} | |
DGATEWAY_EXECUTABLE: ${{ steps.load-variables.outputs.dgateway-executable }} | |
run: | | |
if ($Env:RUNNER_OS -eq "Windows") { | |
$Env:DGATEWAY_PACKAGE = "${{ steps.load-variables.outputs.dgateway-package }}" | |
$Env:DGATEWAY_PSMODULE_PATH = "${{ steps.load-variables.outputs.dgateway-psmodule-output-path }}" | |
} | |
$Env:DGATEWAY_WEBCLIENT_PATH = Join-Path "webapp" "client" | Resolve-Path | |
./ci/tlk.ps1 package -Platform ${{ matrix.os }} -Architecture ${{ matrix.arch }} -CargoProfile ${{ needs.preflight.outputs.rust-profile }} | |
- name: Upload artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: devolutions-gateway-${{ matrix.os }}-${{ matrix.arch }} | |
path: ${{ steps.load-variables.outputs.staging-path }} | |
devolutions-gateway-merge: | |
name: devolutions gateway merge artifacts | |
runs-on: ubuntu-latest | |
needs: [preflight, devolutions-gateway] | |
steps: | |
- name: Merge Artifacts | |
uses: actions/upload-artifact/merge@v4 | |
with: | |
name: devolutions-gateway | |
pattern: devolutions-gateway-* | |
delete-merged: true | |
upload-git-log: | |
name: Upload git-log output | |
runs-on: ubuntu-20.04 | |
if: ${{ github.ref == 'refs/heads/master' }} | |
needs: | |
- preflight | |
steps: | |
- name: Checkout ${{ github.repository }} | |
uses: actions/checkout@v4 | |
with: | |
ref: ${{ needs.preflight.outputs.ref }} | |
fetch-depth: 10 | |
- name: Generate git log | |
shell: pwsh | |
run: git log --max-count=10 > ./git-log.txt | |
- name: Upload artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: git-log | |
path: ./git-log.txt | |
onedrive: | |
name: OneDrive | |
runs-on: ubuntu-20.04 | |
if: ${{ github.ref == 'refs/heads/master' }} | |
needs: | |
- preflight | |
- devolutions-gateway | |
- devolutions-gateway-merge | |
- jetsocat | |
- jetsocat-lipo | |
- upload-git-log | |
steps: | |
- name: Check out Devolutions/actions | |
uses: actions/checkout@v4 | |
with: | |
repository: Devolutions/actions | |
ref: v1 | |
token: ${{ secrets.DEVOLUTIONSBOT_TOKEN }} | |
path: ./.github/workflows | |
## Fetch current date and time | |
- name: Get current timestamp | |
id: timestamp | |
run: echo "timestamp=$(date +'%Y%m%d%H%M')" >> $GITHUB_OUTPUT | |
## Devolutions Toolbox is required for OneDrive uploading | |
- name: Install Devolutions Toolbox | |
uses: ./.github/workflows/toolbox-install | |
with: | |
github_token: ${{ secrets.DEVOLUTIONSBOT_TOKEN }} | |
## Download back the artifacts produced by the other jobs | |
- uses: actions/download-artifact@v4 | |
with: | |
name: jetsocat | |
path: ${{ runner.temp }}/artifacts_raw | |
- uses: actions/download-artifact@v4 | |
with: | |
name: devolutions-gateway | |
path: ${{ runner.temp }}/artifacts_raw | |
- uses: actions/download-artifact@v4 | |
with: | |
name: git-log | |
path: ${{ runner.temp }}/artifacts_raw | |
## Do the actual upload :tada: | |
- name: Prepare upload | |
id: prepare | |
shell: pwsh | |
run: | | |
$version="${{ needs.preflight.outputs.version }}" | |
$ref="${{ needs.preflight.outputs.ref }}" | |
$shortRef=$ref.Substring(0, 8) | |
$sourceFolder = "${{ runner.temp }}/artifacts_raw" | |
$destinationFolder = "${{ runner.temp }}/artifacts" | |
Write-Host "version = $version" | |
Write-Host "ref = $ref" | |
echo "version=$version" >> $Env:GITHUB_OUTPUT | |
echo "short-ref=$shortRef" >> $Env:GITHUB_OUTPUT | |
echo "files-to-upload=$destinationFolder" >> $Env:GITHUB_OUTPUT | |
New-Item -Path "$destinationFolder" -ItemType "directory" | |
$allFiles = Get-ChildItem -Path "$sourceFolder" -Exclude PowerShell | Get-ChildItem -Recurse | Where { -Not $_.Mode.StartsWith('d') } | |
Write-Host | |
foreach ($file in $allFiles) { | |
$dir = $file.Directory | |
$name = $file.Name | |
$source = "$dir/$name" | |
$destination = "$destinationFolder/$name" | |
Write-Host "$source --> $destination" | |
Move-Item -Path "$source" -Destination "$destination" | |
} | |
- name: Upload to OneDrive | |
uses: ./.github/workflows/onedrive-upload | |
with: | |
azure_client_id: ${{ secrets.ONEDRIVE_AUTOMATION_CLIENT_ID }} | |
azure_client_secret: ${{ secrets.ONEDRIVE_AUTOMATION_CLIENT_SECRET }} | |
conflict_behavior: replace | |
destination_path: /Gateway/${{ steps.prepare.outputs.version }}-${{ steps.timestamp.outputs.timestamp }}-${{ steps.prepare.outputs.short-ref }} | |
remote: prereleases | |
source_path: ${{ steps.prepare.outputs.files-to-upload }} | |
dotnet-utils-tests: | |
name: dotnet utils tests | |
runs-on: windows-2022 | |
needs: preflight | |
steps: | |
- name: Checkout ${{ github.repository }} | |
uses: actions/checkout@v4 | |
with: | |
ref: ${{ needs.preflight.outputs.ref }} | |
- name: Test | |
shell: pwsh | |
run: | | |
Set-PSDebug -Trace 1 | |
dotnet test utils/dotnet/GatewayUtils.sln | |
powershell-tests: | |
name: PowerShell module tests | |
runs-on: windows-2022 | |
needs: preflight | |
steps: | |
- name: Checkout ${{ github.repository }} | |
uses: actions/checkout@v4 | |
with: | |
ref: ${{ needs.preflight.outputs.ref }} | |
- name: Install Pester module | |
id: prepare | |
shell: pwsh | |
run: Install-Module Pester -Force | |
- name: Build module | |
shell: pwsh | |
run: | | |
./powershell/build.ps1 | |
- name: Pester | |
shell: pwsh | |
run: | | |
./powershell/run-tests.ps1 |