From 9620dcbcd0ac9c088ca3f0a56894e8bc5dc406db Mon Sep 17 00:00:00 2001 From: Davide Beatrici Date: Fri, 19 Feb 2021 21:22:48 +0100 Subject: [PATCH] Azure Pipelines: Retrieve build number from server, pass it to CMake The script on our server bumps the build number for every new version + commit combination. Each combination is associated to a unique build number and vice versa. There's a separate counter for each version. The reason why we cannot just use "git describe --tags --dirty" is because it relies on the last tag's name and generates a string like "5.01.9674-212-g54280853". What we want, instead, is the last part of the version to be increased for every build. Then, once we consider the branch stable enough, we create a tag like "5.01" and bump the version immediately after the new release. Please note that for pull requests the build number will always be 0, because the secret token is only available in the Nightly pipeline. --- .ci/azure-pipelines/linux.yml | 11 +++++------ .ci/azure-pipelines/linux_build.sh | 15 +++++++++++++++ .ci/azure-pipelines/macos.yml | 10 ++++------ .ci/azure-pipelines/macos_build.sh | 13 +++++++++++++ .ci/azure-pipelines/windows-steps.yml | 18 +++++++----------- .ci/azure-pipelines/windows_build.bat | 26 ++++++++++++++++++++++++++ 6 files changed, 70 insertions(+), 23 deletions(-) create mode 100755 .ci/azure-pipelines/linux_build.sh create mode 100755 .ci/azure-pipelines/macos_build.sh create mode 100644 .ci/azure-pipelines/windows_build.bat diff --git a/.ci/azure-pipelines/linux.yml b/.ci/azure-pipelines/linux.yml index f9b37ba6..d8f1512c 100644 --- a/.ci/azure-pipelines/linux.yml +++ b/.ci/azure-pipelines/linux.yml @@ -4,12 +4,11 @@ jobs: pool: vmImage: ubuntu-16.04 steps: - - script: | - cd $BUILD_BINARIESDIRECTORY - sudo apt -y install cmake gcc g++ ninja-build libncurses5-dev libreadline-dev libssl-dev make zlib1g-dev - cmake -G "Ninja" -DCMAKE_BUILD_TYPE=RelWithDebInfo $BUILD_SOURCESDIRECTORY - cmake --build . - cpack -C Release -G DEB + - script: sudo apt-get -y install cmake gcc g++ ninja-build libncurses5-dev libreadline-dev libssl-dev make zlib1g-dev + displayName: 'Prepare environment' + - script: "$(Build.SourcesDirectory)/.ci/azure-pipelines/linux_build.sh" + env: + SE_BUILD_NUMBER_TOKEN: $(BUILD_NUMBER_TOKEN) displayName: 'Build' - script: | .ci/appveyor-deb-install-test.sh diff --git a/.ci/azure-pipelines/linux_build.sh b/.ci/azure-pipelines/linux_build.sh new file mode 100755 index 00000000..87537491 --- /dev/null +++ b/.ci/azure-pipelines/linux_build.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +if [[ "${#SE_BUILD_NUMBER_TOKEN}" -eq 64 ]]; then + VERSION=$(python3 "version.py") + BUILD_NUMBER=$(curl "https://softether.network/get-build-number?commit=${BUILD_SOURCEVERSION}&version=${VERSION}&token=${SE_BUILD_NUMBER_TOKEN}") +else + BUILD_NUMBER=0 +fi + +cd ${BUILD_BINARIESDIRECTORY} + +cmake -G "Ninja" -DCMAKE_BUILD_TYPE=RelWithDebInfo -DBUILD_NUMBER=${BUILD_NUMBER} ${BUILD_SOURCESDIRECTORY} +cmake --build . + +cpack -C Release -G DEB diff --git a/.ci/azure-pipelines/macos.yml b/.ci/azure-pipelines/macos.yml index ead77931..acbd76e1 100644 --- a/.ci/azure-pipelines/macos.yml +++ b/.ci/azure-pipelines/macos.yml @@ -1,13 +1,11 @@ jobs: - job: macOS - displayName: 'macOS' pool: vmImage: macOS-latest steps: - script: brew install cmake ninja ncurses readline openssl zlib - displayName: 'Install packages' - - script: | - cd $BUILD_BINARIESDIRECTORY - cmake -G "Ninja" -DCMAKE_BUILD_TYPE=RelWithDebInfo -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl $BUILD_SOURCESDIRECTORY - cmake --build . + displayName: 'Prepare environment' + - script: '$(Build.SourcesDirectory)/.ci/azure-pipelines/macos_build.sh' + env: + SE_BUILD_NUMBER_TOKEN: $(BUILD_NUMBER_TOKEN) displayName: 'Build' diff --git a/.ci/azure-pipelines/macos_build.sh b/.ci/azure-pipelines/macos_build.sh new file mode 100755 index 00000000..5befaebc --- /dev/null +++ b/.ci/azure-pipelines/macos_build.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +if [[ "${#SE_BUILD_NUMBER_TOKEN}" -eq 64 ]]; then + VERSION=$(python "version.py") + BUILD_NUMBER=$(curl "https://softether.network/get-build-number?commit=${BUILD_SOURCEVERSION}&version=${VERSION}&token=${SE_BUILD_NUMBER_TOKEN}") +else + BUILD_NUMBER=0 +fi + +cd ${BUILD_BINARIESDIRECTORY} + +cmake -G "Ninja" -DCMAKE_BUILD_TYPE=RelWithDebInfo -DBUILD_NUMBER=${BUILD_NUMBER} -DOPENSSL_ROOT_DIR="/usr/local/opt/openssl" ${BUILD_SOURCESDIRECTORY} +cmake --build . diff --git a/.ci/azure-pipelines/windows-steps.yml b/.ci/azure-pipelines/windows-steps.yml index 30521896..9d053434 100644 --- a/.ci/azure-pipelines/windows-steps.yml +++ b/.ci/azure-pipelines/windows-steps.yml @@ -18,18 +18,14 @@ steps: vcpkg install openssl zlib --triplet ${{parameters.vcpkgTriplet}} workingDirectory: C:/vcpkg displayName: 'Prepare environment' -- script: | - call "${{parameters.vcvarsPath}}" - cmake -G "Ninja" -DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=${{parameters.vcpkgTriplet}} -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_C_COMPILER="${{parameters.compilerPath}}" -DCMAKE_CXX_COMPILER="${{parameters.compilerPath}}" $(Build.SourcesDirectory) - cmake --build . - workingDirectory: $(Build.BinariesDirectory) +- script: '$(Build.SourcesDirectory)/.ci/azure-pipelines/windows_build.bat' + env: + ARCHITECTURE: ${{parameters.architecture}} + COMPILER_PATH: ${{parameters.compilerPath}} + VCPKG_TRIPLET: ${{parameters.vcpkgTriplet}} + VCVARS_PATH: ${{parameters.vcvarsPath}} + SE_BUILD_NUMBER_TOKEN: $(BUILD_NUMBER_TOKEN) displayName: 'Build' -- script: | - mkdir "$(Build.StagingDirectory)/installers" - vpnsetup /SFXMODE:vpnclient /SFXOUT:"$(Build.StagingDirectory)/installers/softether-vpnclient-$(Build.SourceVersion)-${{parameters.architecture}}.exe" - vpnsetup /SFXMODE:vpnserver_vpnbridge /SFXOUT:"$(Build.StagingDirectory)/installers/softether-vpnserver_vpnbridge-$(Build.SourceVersion)-${{parameters.architecture}}.exe" - workingDirectory: $(Build.BinariesDirectory) - displayName: 'Build installers' - powershell: | . .ci/appveyor-vpntest.ps1 displayName: 'Test' diff --git a/.ci/azure-pipelines/windows_build.bat b/.ci/azure-pipelines/windows_build.bat new file mode 100644 index 00000000..6f533c72 --- /dev/null +++ b/.ci/azure-pipelines/windows_build.bat @@ -0,0 +1,26 @@ +@echo on + +:: The method we use to store a command's output into a variable: +:: https://stackoverflow.com/a/6362922 +for /f "tokens=* USEBACKQ" %%g in (`python "version.py"`) do (set "VERSION=%%g") + +:: https://stackoverflow.com/a/8566001 +echo %SE_BUILD_NUMBER_TOKEN%> "%tmp%\length.txt" +for %%? in ("%tmp%\length.txt") do ( set /A SE_BUILD_NUMBER_TOKEN_LENGTH=%%~z? - 2 ) + +if %SE_BUILD_NUMBER_TOKEN_LENGTH% equ 64 ( + for /f "tokens=* USEBACKQ" %%g in (`curl "https://softether.network/get-build-number?commit=%BUILD_SOURCEVERSION%&version=%VERSION%&token=%SE_BUILD_NUMBER_TOKEN%"`) do (set "BUILD_NUMBER=%%g") +) else ( + set BUILD_NUMBER=0 +) + +cd %BUILD_BINARIESDIRECTORY% + +call "%VCVARS_PATH%" + +cmake -G "Ninja" -DCMAKE_TOOLCHAIN_FILE="C:\vcpkg\scripts\buildsystems\vcpkg.cmake" -DVCPKG_TARGET_TRIPLET=%VCPKG_TRIPLET% -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_C_COMPILER="%COMPILER_PATH%" -DCMAKE_CXX_COMPILER="%COMPILER_PATH%" -DBUILD_NUMBER=%BUILD_NUMBER% "%BUILD_SOURCESDIRECTORY%" +cmake --build . + +mkdir "%BUILD_STAGINGDIRECTORY%\installers" +vpnsetup /SFXMODE:vpnclient /SFXOUT:"%BUILD_STAGINGDIRECTORY%\installers\softether-vpnclient-%VERSION%.%BUILD_NUMBER%.%ARCHITECTURE%.exe" +vpnsetup /SFXMODE:vpnserver_vpnbridge /SFXOUT:"%BUILD_STAGINGDIRECTORY%\installers\softether-vpnserver_vpnbridge-%VERSION%.%BUILD_NUMBER%.%ARCHITECTURE%.exe"