mirror of
https://github.com/drakkan/sftpgo.git
synced 2026-03-23 02:04:38 +01:00
The common package defines the interfaces that a protocol must implement and contain code that can be shared among supported protocols. This way should be easier to support new protocols
180 lines
5.6 KiB
YAML
180 lines
5.6 KiB
YAML
name: CI
|
|
|
|
on:
|
|
push:
|
|
branches: [master]
|
|
pull_request:
|
|
|
|
jobs:
|
|
test-deploy:
|
|
name: Test and deploy
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
matrix:
|
|
go: [1.14]
|
|
os: [ubuntu-latest, macos-latest]
|
|
upload-coverage: [true]
|
|
include:
|
|
- go: 1.13
|
|
os: ubuntu-latest
|
|
upload-coverage: false
|
|
- go: 1.14
|
|
os: windows-latest
|
|
upload-coverage: false
|
|
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
|
|
- 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: Initialize data provider
|
|
run: ./sftpgo initprovider
|
|
shell: bash
|
|
|
|
- name: Run test cases using SQLite provider
|
|
run: go test -v ./... -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 ./config -covermode=atomic
|
|
go test -v ./common -covermode=atomic
|
|
go test -v ./httpd -covermode=atomic
|
|
go test -v ./sftpd -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 ./... -covermode=atomic
|
|
env:
|
|
SFTPGO_DATA_PROVIDER__DRIVER: memory
|
|
SFTPGO_DATA_PROVIDER__NAME: ''
|
|
|
|
- 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/
|
|
./sftpgo gen completion bash > output/bash_completion/sftpgo-completion.bash
|
|
./sftpgo gen completion zsh > output/zsh_completion/_sftpgo
|
|
./sftpgo gen man -d output/man/man1
|
|
gzip output/man/man1/*
|
|
|
|
- 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
|
|
|
|
test-postgresql-mysql:
|
|
name: Test with PostgreSQL/MySQL
|
|
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 "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.14
|
|
|
|
- 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: |
|
|
./sftpgo initprovider
|
|
go test -v ./... -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: |
|
|
./sftpgo initprovider
|
|
go test -v ./... -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-latest
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- name: Run golangci-lint
|
|
uses: golangci/golangci-lint-action@v1
|
|
with:
|
|
version: v1.27
|