set stat: remove unecessary check #2243
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: [main] | |
pull_request: | |
permissions: | |
id-token: write | |
contents: read | |
jobs: | |
test-deploy: | |
name: Test and deploy | |
runs-on: ${{ matrix.os }} | |
strategy: | |
matrix: | |
go: ['1.23'] | |
os: [ubuntu-latest, macos-latest] | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Set up Go | |
uses: actions/setup-go@v5 | |
with: | |
go-version: ${{ matrix.go }} | |
- name: Build for Linux/macOS x86_64 | |
run: | | |
go build -trimpath -tags nopgxregisterdefaulttypes,disable_grpc_modules -ldflags "-s -w -X github.com/drakkan/sftpgo/v2/internal/version.commit=`git describe --always --abbrev=8 --dirty` -X github.com/drakkan/sftpgo/v2/internal/version.date=`date -u +%FT%TZ`" -o sftpgo | |
cd tests/eventsearcher | |
go build -trimpath -ldflags "-s -w" -o eventsearcher | |
cd - | |
cd tests/ipfilter | |
go build -trimpath -ldflags "-s -w" -o ipfilter | |
cd - | |
./sftpgo initprovider | |
./sftpgo resetprovider --force | |
- name: Build for macOS arm64 | |
if: startsWith(matrix.os, 'macos-') == true | |
run: CGO_ENABLED=1 GOOS=darwin GOARCH=arm64 SDKROOT=$(xcrun --sdk macosx --show-sdk-path) go build -trimpath -tags nopgxregisterdefaulttypes,disable_grpc_modules -ldflags "-s -w -X github.com/drakkan/sftpgo/v2/internal/version.commit=`git describe --always --abbrev=8 --dirty` -X github.com/drakkan/sftpgo/v2/internal/version.date=`date -u +%FT%TZ`" -o sftpgo_arm64 | |
- name: Run test cases using SQLite provider | |
run: go test -v -tags nopgxregisterdefaulttypes,disable_grpc_modules -p 1 -timeout 15m ./... -coverprofile=coverage.txt -covermode=atomic | |
- name: Upload coverage to Codecov | |
uses: codecov/codecov-action@v5 | |
with: | |
files: ./coverage.txt | |
fail_ci_if_error: false | |
token: ${{ secrets.CODECOV_TOKEN }} | |
- name: Run test cases using bolt provider | |
run: | | |
go test -v -tags nopgxregisterdefaulttypes,disable_grpc_modules -p 1 -timeout 2m ./internal/config -covermode=atomic | |
go test -v -tags nopgxregisterdefaulttypes,disable_grpc_modules -p 1 -timeout 5m ./internal/common -covermode=atomic | |
go test -v -tags nopgxregisterdefaulttypes,disable_grpc_modules -p 1 -timeout 5m ./internal/httpd -covermode=atomic | |
go test -v -tags nopgxregisterdefaulttypes,disable_grpc_modules -p 1 -timeout 8m ./internal/sftpd -covermode=atomic | |
go test -v -tags nopgxregisterdefaulttypes,disable_grpc_modules -p 1 -timeout 5m ./internal/ftpd -covermode=atomic | |
go test -v -tags nopgxregisterdefaulttypes,disable_grpc_modules -p 1 -timeout 5m ./internal/webdavd -covermode=atomic | |
go test -v -tags nopgxregisterdefaulttypes,disable_grpc_modules -p 1 -timeout 2m ./internal/telemetry -covermode=atomic | |
go test -v -tags nopgxregisterdefaulttypes,disable_grpc_modules -p 1 -timeout 2m ./internal/mfa -covermode=atomic | |
go test -v -tags nopgxregisterdefaulttypes,disable_grpc_modules -p 1 -timeout 2m ./internal/command -covermode=atomic | |
env: | |
SFTPGO_DATA_PROVIDER__DRIVER: bolt | |
SFTPGO_DATA_PROVIDER__NAME: 'sftpgo_bolt.db' | |
- name: Run test cases using memory provider | |
run: go test -v -tags nopgxregisterdefaulttypes,disable_grpc_modules -p 1 -timeout 15m ./... -covermode=atomic | |
env: | |
SFTPGO_DATA_PROVIDER__DRIVER: memory | |
SFTPGO_DATA_PROVIDER__NAME: '' | |
- name: Prepare build artifact for macOS | |
if: startsWith(matrix.os, 'macos-') == true | |
run: | | |
mkdir -p output/{init,bash_completion,zsh_completion} | |
cp sftpgo output/sftpgo_x86_64 | |
cp sftpgo_arm64 output/ | |
cp sftpgo.json output/ | |
cp -r templates output/ | |
cp -r static output/ | |
cp -r openapi output/ | |
cp init/com.github.drakkan.sftpgo.plist output/init/ | |
./sftpgo gen completion bash > output/bash_completion/sftpgo | |
./sftpgo gen completion zsh > output/zsh_completion/_sftpgo | |
./sftpgo gen man -d output/man/man1 | |
gzip output/man/man1/* | |
- name: Upload build artifact | |
if: startsWith(matrix.os, 'ubuntu-') != true | |
uses: actions/upload-artifact@v4 | |
with: | |
name: sftpgo-${{ matrix.os }}-go-${{ matrix.go }} | |
path: output | |
test-deploy-windows: | |
name: Test and deploy Windows | |
environment: signing | |
runs-on: windows-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Azure login | |
if: ${{ github.event_name != 'pull_request' }} | |
uses: azure/login@v2 | |
with: | |
client-id: ${{ secrets.AZURE_CLIENT_ID }} | |
tenant-id: ${{ secrets.AZURE_TENANT_ID }} | |
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} | |
- name: Set up Go | |
uses: actions/setup-go@v5 | |
with: | |
go-version: '1.23' | |
- name: Build | |
run: | | |
$GIT_COMMIT = (git describe --always --abbrev=8 --dirty) | Out-String | |
$DATE_TIME = ([datetime]::Now.ToUniversalTime().toString("yyyy-MM-ddTHH:mm:ssZ")) | Out-String | |
$LATEST_TAG = ((git describe --tags $(git rev-list --tags --max-count=1)) | Out-String).Trim() | |
$REV_LIST=$LATEST_TAG+"..HEAD" | |
$COMMITS_FROM_TAG= ((git rev-list $REV_LIST --count) | Out-String).Trim() | |
$FILE_VERSION = $LATEST_TAG.substring(1) + "." + $COMMITS_FROM_TAG | |
go install github.com/tc-hib/go-winres@latest | |
go-winres simply --arch amd64 --product-version $LATEST_TAG-dev-$GIT_COMMIT --file-version $FILE_VERSION --file-description "SFTPGo server" --product-name SFTPGo --copyright "AGPL-3.0 with additional terms" --original-filename sftpgo.exe --icon .\windows-installer\icon.ico | |
go build -trimpath -tags nopgxregisterdefaulttypes,disable_grpc_modules -ldflags "-s -w -X github.com/drakkan/sftpgo/v2/internal/version.commit=$GIT_COMMIT -X github.com/drakkan/sftpgo/v2/internal/version.date=$DATE_TIME" -o sftpgo.exe | |
cd tests/eventsearcher | |
go build -trimpath -ldflags "-s -w" -o eventsearcher.exe | |
cd ../.. | |
cd tests/ipfilter | |
go build -trimpath -ldflags "-s -w" -o ipfilter.exe | |
cd ../.. | |
mkdir arm64 | |
$Env:CGO_ENABLED='0' | |
$Env:GOOS='windows' | |
$Env:GOARCH='arm64' | |
go-winres simply --arch arm64 --product-version $LATEST_TAG-dev-$GIT_COMMIT --file-version $FILE_VERSION --file-description "SFTPGo server" --product-name SFTPGo --copyright "AGPL-3.0 with additional terms" --original-filename sftpgo.exe --icon .\windows-installer\icon.ico | |
go build -trimpath -tags nopgxregisterdefaulttypes,disable_grpc_modules,nosqlite -ldflags "-s -w -X github.com/drakkan/sftpgo/v2/internal/version.commit=$GIT_COMMIT -X github.com/drakkan/sftpgo/v2/internal/version.date=$DATE_TIME" -o .\arm64\sftpgo.exe | |
mkdir x86 | |
$Env:GOARCH='386' | |
go-winres simply --arch 386 --product-version $LATEST_TAG-dev-$GIT_COMMIT --file-version $FILE_VERSION --file-description "SFTPGo server" --product-name SFTPGo --copyright "AGPL-3.0 with additional terms" --original-filename sftpgo.exe --icon .\windows-installer\icon.ico | |
go build -trimpath -tags nopgxregisterdefaulttypes,disable_grpc_modules,nosqlite -ldflags "-s -w -X github.com/drakkan/sftpgo/v2/internal/version.commit=$GIT_COMMIT -X github.com/drakkan/sftpgo/v2/internal/version.date=$DATE_TIME" -o .\x86\sftpgo.exe | |
Remove-Item Env:\CGO_ENABLED | |
Remove-Item Env:\GOOS | |
Remove-Item Env:\GOARCH | |
- name: Sign binaries | |
if: ${{ github.event_name != 'pull_request' }} | |
uses: azure/[email protected] | |
with: | |
endpoint: https://eus.codesigning.azure.net/ | |
trusted-signing-account-name: nicola | |
certificate-profile-name: SFTPGo | |
files: | | |
${{ github.workspace }}\sftpgo.exe | |
${{ github.workspace }}\arm64\sftpgo.exe | |
${{ github.workspace }}\x86\sftpgo.exe | |
file-digest: SHA256 | |
timestamp-rfc3161: http://timestamp.acs.microsoft.com | |
timestamp-digest: SHA256 | |
exclude-environment-credential: true | |
exclude-workload-identity-credential: true | |
exclude-managed-identity-credential: true | |
exclude-shared-token-cache-credential: true | |
exclude-visual-studio-credential: true | |
exclude-visual-studio-code-credential: true | |
exclude-azure-cli-credential: false | |
exclude-azure-powershell-credential: true | |
exclude-azure-developer-cli-credential: true | |
exclude-interactive-browser-credential: true | |
- name: Run test cases using SQLite provider | |
run: go test -v -tags nopgxregisterdefaulttypes,disable_grpc_modules -p 1 -timeout 15m ./... -coverprofile=coverage.txt -covermode=atomic | |
- name: Run test cases using bolt provider | |
run: | | |
go test -v -tags nopgxregisterdefaulttypes,disable_grpc_modules -p 1 -timeout 2m ./internal/config -covermode=atomic | |
go test -v -tags nopgxregisterdefaulttypes,disable_grpc_modules -p 1 -timeout 5m ./internal/common -covermode=atomic | |
go test -v -tags nopgxregisterdefaulttypes,disable_grpc_modules -p 1 -timeout 5m ./internal/httpd -covermode=atomic | |
go test -v -tags nopgxregisterdefaulttypes,disable_grpc_modules -p 1 -timeout 8m ./internal/sftpd -covermode=atomic | |
go test -v -tags nopgxregisterdefaulttypes,disable_grpc_modules -p 1 -timeout 5m ./internal/ftpd -covermode=atomic | |
go test -v -tags nopgxregisterdefaulttypes,disable_grpc_modules -p 1 -timeout 5m ./internal/webdavd -covermode=atomic | |
go test -v -tags nopgxregisterdefaulttypes,disable_grpc_modules -p 1 -timeout 2m ./internal/telemetry -covermode=atomic | |
go test -v -tags nopgxregisterdefaulttypes,disable_grpc_modules -p 1 -timeout 2m ./internal/mfa -covermode=atomic | |
go test -v -tags nopgxregisterdefaulttypes,disable_grpc_modules -p 1 -timeout 2m ./internal/command -covermode=atomic | |
env: | |
SFTPGO_DATA_PROVIDER__DRIVER: bolt | |
SFTPGO_DATA_PROVIDER__NAME: 'sftpgo_bolt.db' | |
- name: Run test cases using memory provider | |
run: go test -v -tags nopgxregisterdefaulttypes,disable_grpc_modules -p 1 -timeout 15m ./... -covermode=atomic | |
env: | |
SFTPGO_DATA_PROVIDER__DRIVER: memory | |
SFTPGO_DATA_PROVIDER__NAME: '' | |
- name: Initialize data provider | |
run: | | |
rm sftpgo.db | |
./sftpgo initprovider | |
shell: bash | |
- name: Prepare Windows installers | |
if: ${{ github.event_name != 'pull_request' }} | |
run: | | |
Remove-Item -LiteralPath "output" -Force -Recurse -ErrorAction Ignore | |
mkdir output | |
copy .\sftpgo.exe .\output | |
copy .\sftpgo.json .\output | |
copy .\sftpgo.db .\output | |
copy .\LICENSE .\output\LICENSE.txt | |
copy .\NOTICE .\output\NOTICE.txt | |
mkdir output\templates | |
xcopy .\templates .\output\templates\ /E | |
mkdir output\static | |
xcopy .\static .\output\static\ /E | |
mkdir output\openapi | |
xcopy .\openapi .\output\openapi\ /E | |
$LATEST_TAG = ((git describe --tags $(git rev-list --tags --max-count=1)) | Out-String).Trim() | |
$REV_LIST=$LATEST_TAG+"..HEAD" | |
$COMMITS_FROM_TAG= ((git rev-list $REV_LIST --count) | Out-String).Trim() | |
$Env:SFTPGO_ISS_DEV_VERSION = $LATEST_TAG + "." + $COMMITS_FROM_TAG | |
iscc .\windows-installer\sftpgo.iss | |
rm .\output\sftpgo.exe | |
rm .\output\sftpgo.db | |
copy .\arm64\sftpgo.exe .\output | |
(Get-Content .\output\sftpgo.json).replace('"sqlite"', '"bolt"') | Set-Content .\output\sftpgo.json | |
$Env:SFTPGO_DATA_PROVIDER__DRIVER='bolt' | |
$Env:SFTPGO_DATA_PROVIDER__NAME='.\output\sftpgo.db' | |
.\sftpgo.exe initprovider | |
Remove-Item Env:\SFTPGO_DATA_PROVIDER__DRIVER | |
Remove-Item Env:\SFTPGO_DATA_PROVIDER__NAME | |
$Env:SFTPGO_ISS_ARCH='arm64' | |
iscc .\windows-installer\sftpgo.iss | |
rm .\output\sftpgo.exe | |
copy .\x86\sftpgo.exe .\output | |
$Env:SFTPGO_ISS_ARCH='x86' | |
iscc .\windows-installer\sftpgo.iss | |
- name: Sign installers | |
if: ${{ github.event_name != 'pull_request' }} | |
uses: azure/[email protected] | |
with: | |
endpoint: https://eus.codesigning.azure.net/ | |
trusted-signing-account-name: nicola | |
certificate-profile-name: SFTPGo | |
files: | | |
${{ github.workspace }}\sftpgo_windows_x86_64.exe | |
${{ github.workspace }}\sftpgo_windows_arm64.exe | |
${{ github.workspace }}\sftpgo_windows_x86.exe | |
file-digest: SHA256 | |
timestamp-rfc3161: http://timestamp.acs.microsoft.com | |
timestamp-digest: SHA256 | |
exclude-environment-credential: true | |
exclude-workload-identity-credential: true | |
exclude-managed-identity-credential: true | |
exclude-shared-token-cache-credential: true | |
exclude-visual-studio-credential: true | |
exclude-visual-studio-code-credential: true | |
exclude-azure-cli-credential: false | |
exclude-azure-powershell-credential: true | |
exclude-azure-developer-cli-credential: true | |
exclude-interactive-browser-credential: true | |
- name: Upload Windows installer x86_64 artifact | |
if: ${{ github.event_name != 'pull_request' }} | |
uses: actions/upload-artifact@v4 | |
with: | |
name: sftpgo_windows_installer_x86_64 | |
path: ./sftpgo_windows_x86_64.exe | |
- name: Upload Windows installer arm64 artifact | |
if: ${{ github.event_name != 'pull_request' }} | |
uses: actions/upload-artifact@v4 | |
with: | |
name: sftpgo_windows_installer_arm64 | |
path: ./sftpgo_windows_arm64.exe | |
- name: Upload Windows installer x86 artifact | |
if: ${{ github.event_name != 'pull_request' }} | |
uses: actions/upload-artifact@v4 | |
with: | |
name: sftpgo_windows_installer_x86 | |
path: ./sftpgo_windows_x86.exe | |
- name: Prepare build artifact for Windows | |
run: | | |
Remove-Item -LiteralPath "output" -Force -Recurse -ErrorAction Ignore | |
mkdir output | |
copy .\sftpgo.exe .\output | |
mkdir output\arm64 | |
copy .\arm64\sftpgo.exe .\output\arm64 | |
mkdir output\x86 | |
copy .\x86\sftpgo.exe .\output\x86 | |
copy .\sftpgo.json .\output | |
(Get-Content .\output\sftpgo.json).replace('"sqlite"', '"bolt"') | Set-Content .\output\sftpgo.json | |
mkdir output\templates | |
xcopy .\templates .\output\templates\ /E | |
mkdir output\static | |
xcopy .\static .\output\static\ /E | |
mkdir output\openapi | |
xcopy .\openapi .\output\openapi\ /E | |
- name: Upload build artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: sftpgo-windows-portable | |
path: output | |
test-build-flags: | |
name: Test build flags | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Go | |
uses: actions/setup-go@v5 | |
with: | |
go-version: '1.23' | |
- name: Build | |
run: | | |
go build -trimpath -tags nopgxregisterdefaulttypes,disable_grpc_modules,nogcs,nos3,noportable,nobolt,nomysql,nopgsql,nosqlite,nometrics,noazblob,unixcrypt -ldflags "-s -w -X github.com/drakkan/sftpgo/v2/internal/internal/version.commit=`git describe --always --abbrev=8 --dirty` -X github.com/drakkan/sftpgo/v2/internal/version.date=`date -u +%FT%TZ`" -o sftpgo | |
./sftpgo -v | |
cp -r openapi static templates internal/bundle/ | |
go build -trimpath -tags nopgxregisterdefaulttypes,disable_grpc_modules,bundle -ldflags "-s -w -X github.com/drakkan/sftpgo/v2/internal/version.commit=`git describe --always --abbrev=8 --dirty` -X github.com/drakkan/sftpgo/v2/internal/version.date=`date -u +%FT%TZ`" -o sftpgo | |
./sftpgo -v | |
test-postgresql-mysql-crdb: | |
name: Test with PgSQL/MySQL/Cockroach | |
runs-on: ubuntu-latest | |
services: | |
postgres: | |
image: postgres:latest | |
env: | |
POSTGRES_PASSWORD: postgres | |
POSTGRES_DB: sftpgo | |
options: >- | |
--health-cmd pg_isready | |
--health-interval 10s | |
--health-timeout 5s | |
--health-retries 5 | |
ports: | |
- 5432:5432 | |
mariadb: | |
image: mariadb:latest | |
env: | |
MYSQL_ROOT_PASSWORD: mysql | |
MYSQL_DATABASE: sftpgo | |
MYSQL_USER: sftpgo | |
MYSQL_PASSWORD: sftpgo | |
options: >- | |
--health-cmd "mariadb-admin status -h 127.0.0.1 -P 3306 -u root -p$MYSQL_ROOT_PASSWORD" | |
--health-interval 10s | |
--health-timeout 5s | |
--health-retries 6 | |
ports: | |
- 3307:3306 | |
mysql: | |
image: mysql:latest | |
env: | |
MYSQL_ROOT_PASSWORD: mysql | |
MYSQL_DATABASE: sftpgo | |
MYSQL_USER: sftpgo | |
MYSQL_PASSWORD: sftpgo | |
options: >- | |
--health-cmd "mysqladmin status -h 127.0.0.1 -P 3306 -u root -p$MYSQL_ROOT_PASSWORD" | |
--health-interval 10s | |
--health-timeout 5s | |
--health-retries 6 | |
ports: | |
- 3308:3306 | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Go | |
uses: actions/setup-go@v5 | |
with: | |
go-version: '1.23' | |
- name: Build | |
run: | | |
go build -trimpath -tags nopgxregisterdefaulttypes,disable_grpc_modules -ldflags "-s -w -X github.com/drakkan/sftpgo/v2/internal/version.commit=`git describe --always --abbrev=8 --dirty` -X github.com/drakkan/sftpgo/v2/internal/version.date=`date -u +%FT%TZ`" -o sftpgo | |
cd tests/eventsearcher | |
go build -trimpath -ldflags "-s -w" -o eventsearcher | |
cd - | |
cd tests/ipfilter | |
go build -trimpath -ldflags "-s -w" -o ipfilter | |
cd - | |
- name: Run tests using MySQL provider | |
run: | | |
./sftpgo initprovider | |
./sftpgo resetprovider --force | |
go test -v -tags nopgxregisterdefaulttypes,disable_grpc_modules -p 1 -timeout 15m ./... -covermode=atomic | |
env: | |
SFTPGO_DATA_PROVIDER__DRIVER: mysql | |
SFTPGO_DATA_PROVIDER__NAME: sftpgo | |
SFTPGO_DATA_PROVIDER__HOST: localhost | |
SFTPGO_DATA_PROVIDER__PORT: 3308 | |
SFTPGO_DATA_PROVIDER__USERNAME: sftpgo | |
SFTPGO_DATA_PROVIDER__PASSWORD: sftpgo | |
- name: Run tests using PostgreSQL provider | |
run: | | |
./sftpgo initprovider | |
./sftpgo resetprovider --force | |
go test -v -tags nopgxregisterdefaulttypes,disable_grpc_modules -p 1 -timeout 15m ./... -covermode=atomic | |
env: | |
SFTPGO_DATA_PROVIDER__DRIVER: postgresql | |
SFTPGO_DATA_PROVIDER__NAME: sftpgo | |
SFTPGO_DATA_PROVIDER__HOST: localhost | |
SFTPGO_DATA_PROVIDER__PORT: 5432 | |
SFTPGO_DATA_PROVIDER__USERNAME: postgres | |
SFTPGO_DATA_PROVIDER__PASSWORD: postgres | |
- name: Run tests using MariaDB provider | |
run: | | |
./sftpgo initprovider | |
./sftpgo resetprovider --force | |
go test -v -tags nopgxregisterdefaulttypes,disable_grpc_modules -p 1 -timeout 15m ./... -covermode=atomic | |
env: | |
SFTPGO_DATA_PROVIDER__DRIVER: mysql | |
SFTPGO_DATA_PROVIDER__NAME: sftpgo | |
SFTPGO_DATA_PROVIDER__HOST: localhost | |
SFTPGO_DATA_PROVIDER__PORT: 3307 | |
SFTPGO_DATA_PROVIDER__USERNAME: sftpgo | |
SFTPGO_DATA_PROVIDER__PASSWORD: sftpgo | |
SFTPGO_DATA_PROVIDER__SQL_TABLES_PREFIX: prefix_ | |
- name: Run tests using CockroachDB provider | |
run: | | |
docker run --rm --name crdb --health-cmd "curl -I http://127.0.0.1:8080" --health-interval 10s --health-timeout 5s --health-retries 6 -p 26257:26257 -d cockroachdb/cockroach:latest start-single-node --insecure --listen-addr :26257 | |
sleep 10 | |
docker exec crdb cockroach sql --insecure -e 'create database "sftpgo"' | |
./sftpgo initprovider | |
./sftpgo resetprovider --force | |
go test -v -tags nopgxregisterdefaulttypes,disable_grpc_modules -p 1 -timeout 15m ./... -covermode=atomic | |
docker stop crdb | |
env: | |
SFTPGO_DATA_PROVIDER__DRIVER: cockroachdb | |
SFTPGO_DATA_PROVIDER__NAME: sftpgo | |
SFTPGO_DATA_PROVIDER__HOST: localhost | |
SFTPGO_DATA_PROVIDER__PORT: 26257 | |
SFTPGO_DATA_PROVIDER__USERNAME: root | |
SFTPGO_DATA_PROVIDER__PASSWORD: | |
SFTPGO_DATA_PROVIDER__TARGET_SESSION_ATTRS: any | |
SFTPGO_DATA_PROVIDER__SQL_TABLES_PREFIX: prefix_ | |
build-linux-packages: | |
name: Build Linux packages | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
include: | |
- arch: amd64 | |
distro: ubuntu:18.04 | |
go: latest | |
go-arch: amd64 | |
- arch: aarch64 | |
distro: ubuntu18.04 | |
go: latest | |
go-arch: arm64 | |
- arch: ppc64le | |
distro: ubuntu18.04 | |
go: latest | |
go-arch: ppc64le | |
- arch: armv7 | |
distro: ubuntu18.04 | |
go: latest | |
go-arch: arm7 | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Get commit SHA | |
id: get_commit | |
run: echo "COMMIT=${GITHUB_SHA::8}" >> $GITHUB_OUTPUT | |
shell: bash | |
- name: Build on amd64 | |
if: ${{ matrix.arch == 'amd64' }} | |
run: | | |
echo '#!/bin/bash' > build.sh | |
echo '' >> build.sh | |
echo 'set -e' >> build.sh | |
echo 'apt-get update -q -y' >> build.sh | |
echo 'apt-get install -q -y curl gcc' >> build.sh | |
if [ ${{ matrix.go }} == 'latest' ] | |
then | |
echo 'GO_VERSION=$(curl -L https://go.dev/VERSION?m=text | head -n 1)' >> build.sh | |
else | |
echo 'GO_VERSION=${{ matrix.go }}' >> build.sh | |
fi | |
echo 'GO_DOWNLOAD_ARCH=${{ matrix.go-arch }}' >> build.sh | |
echo 'curl --retry 5 --retry-delay 2 --connect-timeout 10 -o go.tar.gz -L https://go.dev/dl/${GO_VERSION}.linux-${GO_DOWNLOAD_ARCH}.tar.gz' >> build.sh | |
echo 'tar -C /usr/local -xzf go.tar.gz' >> build.sh | |
echo 'export PATH=$PATH:/usr/local/go/bin' >> build.sh | |
echo 'go version' >> build.sh | |
echo 'cd /usr/local/src' >> build.sh | |
echo 'go build -buildvcs=false -trimpath -tags nopgxregisterdefaulttypes,disable_grpc_modules -ldflags "-s -w -X github.com/drakkan/sftpgo/v2/internal/version.commit=${{ steps.get_commit.outputs.COMMIT }} -X github.com/drakkan/sftpgo/v2/internal/version.date=`date -u +%FT%TZ`" -o sftpgo' >> build.sh | |
chmod 755 build.sh | |
docker run --rm --name ubuntu-build --mount type=bind,source=`pwd`,target=/usr/local/src ${{ matrix.distro }} /usr/local/src/build.sh | |
mkdir -p output/{init,bash_completion,zsh_completion} | |
cp sftpgo.json output/ | |
cp -r templates output/ | |
cp -r static output/ | |
cp -r openapi output/ | |
cp init/sftpgo.service output/init/ | |
./sftpgo gen completion bash > output/bash_completion/sftpgo | |
./sftpgo gen completion zsh > output/zsh_completion/_sftpgo | |
./sftpgo gen man -d output/man/man1 | |
gzip output/man/man1/* | |
cp sftpgo output/ | |
- uses: uraimo/run-on-arch-action@v2 | |
if: ${{ matrix.arch != 'amd64' }} | |
name: Build for ${{ matrix.arch }} | |
id: build | |
with: | |
arch: ${{ matrix.arch }} | |
distro: ${{ matrix.distro }} | |
setup: | | |
mkdir -p "${PWD}/output" | |
dockerRunArgs: | | |
--volume "${PWD}/output:/output" | |
shell: /bin/bash | |
install: | | |
apt-get update -q -y | |
apt-get install -q -y curl gcc | |
if [ ${{ matrix.go }} == 'latest' ] | |
then | |
GO_VERSION=$(curl -L https://go.dev/VERSION?m=text | head -n 1) | |
else | |
GO_VERSION=${{ matrix.go }} | |
fi | |
GO_DOWNLOAD_ARCH=${{ matrix.go-arch }} | |
if [ ${{ matrix.arch}} == 'armv7' ] | |
then | |
GO_DOWNLOAD_ARCH=armv6l | |
fi | |
curl --retry 5 --retry-delay 2 --connect-timeout 10 -o go.tar.gz -L https://go.dev/dl/${GO_VERSION}.linux-${GO_DOWNLOAD_ARCH}.tar.gz | |
tar -C /usr/local -xzf go.tar.gz | |
run: | | |
export PATH=$PATH:/usr/local/go/bin | |
go version | |
if [ ${{ matrix.arch}} == 'armv7' ] | |
then | |
export GOARM=7 | |
fi | |
go build -buildvcs=false -trimpath -tags nopgxregisterdefaulttypes,disable_grpc_modules -ldflags "-s -w -X github.com/drakkan/sftpgo/v2/internal/version.commit=${{ steps.get_commit.outputs.COMMIT }} -X github.com/drakkan/sftpgo/v2/internal/version.date=`date -u +%FT%TZ`" -o sftpgo | |
mkdir -p output/{init,bash_completion,zsh_completion} | |
cp sftpgo.json output/ | |
cp -r templates output/ | |
cp -r static output/ | |
cp -r openapi output/ | |
cp init/sftpgo.service output/init/ | |
./sftpgo gen completion bash > output/bash_completion/sftpgo | |
./sftpgo gen completion zsh > output/zsh_completion/_sftpgo | |
./sftpgo gen man -d output/man/man1 | |
gzip output/man/man1/* | |
cp sftpgo output/ | |
- name: Upload build artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: sftpgo-linux-${{ matrix.arch }}-go-${{ matrix.go }} | |
path: output | |
- name: Build Packages | |
id: build_linux_pkgs | |
run: | | |
export NFPM_ARCH=${{ matrix.go-arch }} | |
cd pkgs | |
./build.sh | |
PKG_VERSION=$(cat dist/version) | |
echo "pkg-version=${PKG_VERSION}" >> $GITHUB_OUTPUT | |
- name: Upload Debian Package | |
uses: actions/upload-artifact@v4 | |
with: | |
name: sftpgo-${{ steps.build_linux_pkgs.outputs.pkg-version }}-${{ matrix.go-arch }}-deb | |
path: pkgs/dist/deb/* | |
- name: Upload RPM Package | |
uses: actions/upload-artifact@v4 | |
with: | |
name: sftpgo-${{ steps.build_linux_pkgs.outputs.pkg-version }}-${{ matrix.go-arch }}-rpm | |
path: pkgs/dist/rpm/* | |
golangci-lint: | |
name: golangci-lint | |
runs-on: ubuntu-latest | |
steps: | |
- name: Set up Go | |
uses: actions/setup-go@v5 | |
with: | |
go-version: '1.23' | |
- uses: actions/checkout@v4 | |
- name: Run golangci-lint | |
uses: golangci/golangci-lint-action@v6 | |
with: | |
args: --timeout=10m | |
version: latest |