mirror of
https://github.com/drakkan/sftpgo.git
synced 2024-11-22 07:30:25 +00:00
1ac61468b9
currently xgo don't allow to choose the building OS, this could cause unexpected issues, for example v2.0.3 packages for arm64 and ppc64 don't run on Ubuntu 18.04
267 lines
9.2 KiB
YAML
267 lines
9.2 KiB
YAML
name: CI
|
|
|
|
on:
|
|
push:
|
|
branches: [2.0.x]
|
|
pull_request:
|
|
|
|
jobs:
|
|
test-deploy:
|
|
name: Test and deploy
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
matrix:
|
|
go: [1.16]
|
|
os: [ubuntu-18.04, macos-10.15, windows-2019]
|
|
upload-coverage: [false]
|
|
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Set up Go
|
|
uses: actions/setup-go@v2
|
|
with:
|
|
go-version: ${{ matrix.go }}
|
|
|
|
- name: Build for Linux/macOS
|
|
if: startsWith(matrix.os, 'windows-') != true
|
|
run: go build -ldflags "-s -w -X github.com/drakkan/sftpgo/version.commit=`git describe --always --dirty` -X github.com/drakkan/sftpgo/version.date=`date -u +%FT%TZ`" -o sftpgo
|
|
|
|
- name: Build for Windows
|
|
if: startsWith(matrix.os, 'windows-')
|
|
run: |
|
|
$GIT_COMMIT = (git describe --always --dirty) | Out-String
|
|
$DATE_TIME = ([datetime]::Now.ToUniversalTime().toString("yyyy-MM-ddTHH:mm:ssZ")) | Out-String
|
|
go build -ldflags "-s -w -X github.com/drakkan/sftpgo/version.commit=$GIT_COMMIT -X github.com/drakkan/sftpgo/version.date=$DATE_TIME" -o sftpgo.exe
|
|
|
|
- name: Run test cases using SQLite provider
|
|
run: go test -v -p 1 -timeout 10m ./... -coverprofile=coverage.txt -covermode=atomic
|
|
|
|
- name: Upload coverage to Codecov
|
|
if: ${{ matrix.upload-coverage }}
|
|
uses: codecov/codecov-action@v1
|
|
with:
|
|
file: ./coverage.txt
|
|
fail_ci_if_error: false
|
|
|
|
- name: Run test cases using bolt provider
|
|
run: |
|
|
go test -v -p 1 -timeout 2m ./config -covermode=atomic
|
|
go test -v -p 1 -timeout 2m ./common -covermode=atomic
|
|
go test -v -p 1 -timeout 3m ./httpd -covermode=atomic
|
|
go test -v -p 1 -timeout 8m ./sftpd -covermode=atomic
|
|
go test -v -p 1 -timeout 2m ./ftpd -covermode=atomic
|
|
go test -v -p 1 -timeout 2m ./webdavd -covermode=atomic
|
|
go test -v -p 1 -timeout 2m ./telemetry -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 -p 1 -timeout 10m ./... -covermode=atomic
|
|
env:
|
|
SFTPGO_DATA_PROVIDER__DRIVER: memory
|
|
SFTPGO_DATA_PROVIDER__NAME: ''
|
|
|
|
- name: Gather cross build info
|
|
id: cross_info
|
|
if: ${{ matrix.upload-coverage && startsWith(matrix.os, 'ubuntu-') }}
|
|
run: |
|
|
GIT_COMMIT=$(git describe --always)
|
|
BUILD_DATE=$(date -u +%FT%TZ)
|
|
echo ::set-output name=sha::${GIT_COMMIT}
|
|
echo ::set-output name=created::${BUILD_DATE}
|
|
|
|
- name: Cross build with xgo
|
|
if: ${{ matrix.upload-coverage && startsWith(matrix.os, 'ubuntu-') }}
|
|
uses: crazy-max/ghaction-xgo@v1
|
|
with:
|
|
go_version: 1.16.x
|
|
dest: cross
|
|
prefix: sftpgo
|
|
targets: linux/arm64,linux/ppc64le
|
|
v: true
|
|
x: false
|
|
race: false
|
|
ldflags: -s -w -X github.com/drakkan/sftpgo/version.commit=${{ steps.cross_info.outputs.sha }} -X github.com/drakkan/sftpgo/version.date=${{ steps.cross_info.outputs.created }}
|
|
buildmode: default
|
|
|
|
- name: Prepare build artifact for Linux/macOS
|
|
if: startsWith(matrix.os, 'windows-') != true
|
|
run: |
|
|
mkdir -p output/{bash_completion,zsh_completion}
|
|
cp sftpgo output/
|
|
cp sftpgo.json output/
|
|
cp -r templates output/
|
|
cp -r static output/
|
|
cp -r init output/
|
|
./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: Copy cross compiled Linux binaries
|
|
if: ${{ matrix.upload-coverage && startsWith(matrix.os, 'ubuntu-') }}
|
|
run: |
|
|
cp cross/sftpgo-linux-arm64 output/
|
|
cp cross/sftpgo-linux-ppc64le output/
|
|
|
|
- name: Prepare build artifact for Windows
|
|
if: startsWith(matrix.os, 'windows-')
|
|
run: |
|
|
mkdir output
|
|
copy .\sftpgo.exe .\output
|
|
copy .\sftpgo.json .\output
|
|
mkdir output\templates
|
|
xcopy .\templates .\output\templates\ /E
|
|
mkdir output\static
|
|
xcopy .\static .\output\static\ /E
|
|
|
|
- name: Upload build artifact
|
|
uses: actions/upload-artifact@v2
|
|
with:
|
|
name: sftpgo-${{ matrix.os }}-go${{ matrix.go }}
|
|
path: output
|
|
|
|
- name: Build Linux Packages
|
|
id: build_linux_pkgs
|
|
if: ${{ matrix.upload-coverage && startsWith(matrix.os, 'ubuntu-') }}
|
|
run: |
|
|
cp -r pkgs pkgs_arm64
|
|
cp -r pkgs pkgs_ppc64le
|
|
cd pkgs
|
|
./build.sh
|
|
cd ..
|
|
export NFPM_ARCH=arm64
|
|
export BIN_SUFFIX=-linux-arm64
|
|
cp cross/sftpgo${BIN_SUFFIX} .
|
|
cd pkgs_arm64
|
|
./build.sh
|
|
cd ..
|
|
export NFPM_ARCH=ppc64le
|
|
export BIN_SUFFIX=-linux-ppc64le
|
|
cp cross/sftpgo${BIN_SUFFIX} .
|
|
cd pkgs_ppc64le
|
|
./build.sh
|
|
PKG_VERSION=$(cat dist/version)
|
|
echo "::set-output name=pkg-version::${PKG_VERSION}"
|
|
|
|
- name: Upload Debian Package
|
|
if: ${{ matrix.upload-coverage && startsWith(matrix.os, 'ubuntu-') }}
|
|
uses: actions/upload-artifact@v2
|
|
with:
|
|
name: sftpgo-${{ steps.build_linux_pkgs.outputs.pkg-version }}-x86_64-deb
|
|
path: pkgs/dist/deb/*
|
|
|
|
- name: Upload RPM Package
|
|
if: ${{ matrix.upload-coverage && startsWith(matrix.os, 'ubuntu-') }}
|
|
uses: actions/upload-artifact@v2
|
|
with:
|
|
name: sftpgo-${{ steps.build_linux_pkgs.outputs.pkg-version }}-x86_64-rpm
|
|
path: pkgs/dist/rpm/*
|
|
|
|
- name: Upload Debian Package arm64
|
|
if: ${{ matrix.upload-coverage && startsWith(matrix.os, 'ubuntu-') }}
|
|
uses: actions/upload-artifact@v2
|
|
with:
|
|
name: sftpgo-${{ steps.build_linux_pkgs.outputs.pkg-version }}-arm64-deb
|
|
path: pkgs_arm64/dist/deb/*
|
|
|
|
- name: Upload RPM Package arm64
|
|
if: ${{ matrix.upload-coverage && startsWith(matrix.os, 'ubuntu-') }}
|
|
uses: actions/upload-artifact@v2
|
|
with:
|
|
name: sftpgo-${{ steps.build_linux_pkgs.outputs.pkg-version }}-arm64-rpm
|
|
path: pkgs_arm64/dist/rpm/*
|
|
|
|
- name: Upload Debian Package ppc64le
|
|
if: ${{ matrix.upload-coverage && startsWith(matrix.os, 'ubuntu-') }}
|
|
uses: actions/upload-artifact@v2
|
|
with:
|
|
name: sftpgo-${{ steps.build_linux_pkgs.outputs.pkg-version }}-ppc64le-deb
|
|
path: pkgs_ppc64le/dist/deb/*
|
|
|
|
- name: Upload RPM Package ppc64le
|
|
if: ${{ matrix.upload-coverage && startsWith(matrix.os, 'ubuntu-') }}
|
|
uses: actions/upload-artifact@v2
|
|
with:
|
|
name: sftpgo-${{ steps.build_linux_pkgs.outputs.pkg-version }}-ppc64le-rpm
|
|
path: pkgs_ppc64le/dist/rpm/*
|
|
|
|
test-postgresql-mysql:
|
|
name: Test with PostgreSQL/MySQL
|
|
runs-on: ubuntu-18.04
|
|
|
|
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 "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:
|
|
- 3307:3306
|
|
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
|
|
- name: Set up Go
|
|
uses: actions/setup-go@v2
|
|
with:
|
|
go-version: 1.16
|
|
|
|
- name: Build
|
|
run: go build -ldflags "-s -w -X github.com/drakkan/sftpgo/version.commit=`git describe --always --dirty` -X github.com/drakkan/sftpgo/version.date=`date -u +%FT%TZ`" -o sftpgo
|
|
|
|
- name: Run tests using PostgreSQL provider
|
|
run: |
|
|
go test -v -p 1 -timeout 10m ./... -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 MySQL provider
|
|
run: |
|
|
go test -v -p 1 -timeout 10m ./... -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
|
|
|
|
golangci-lint:
|
|
name: golangci-lint
|
|
runs-on: ubuntu-18.04
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- name: Run golangci-lint
|
|
uses: golangci/golangci-lint-action@v2
|
|
with:
|
|
version: v1.37.1
|