name: Development Workflow on: push: branches: [master] pull_request: jobs: 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 tests-upload-unix: name: Run tests and upload build artifacts runs-on: ${{ matrix.os }} strategy: matrix: go: [1.14] os: [ubuntu-latest, macos-latest] include: - go: 1.13 os: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Install Go uses: actions/setup-go@v2 with: go-version: ${{ matrix.go }} - name: Build run: go build -i -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: Initialize data provider run: ./sftpgo initprovider - name: Run test cases using SQLite provider run: go test -v ./... -coverprofile=coverage.txt -covermode=atomic - name: Upload to Codecov if: ${{ matrix.go == '1.14' }} uses: codecov/codecov-action@v1 with: file: ./coverage.txt fail_ci_if_error: false - name: Prepare artifact run: | mkdir output cp sftpgo output/ cp sftpgo.json output/ cp -r templates output/ cp -r static output/ - name: Upload artifact uses: actions/upload-artifact@v2 with: name: sftpgo-${{ matrix.os }}-go${{ matrix.go }} path: output - name: Run test cases using bolt provider if: ${{ matrix.go == '1.14' }} run: | go test -v ./config -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 if: ${{ matrix.go == '1.14' }} run: go test -v ./... -covermode=atomic env: SFTPGO_DATA_PROVIDER__DRIVER: memory SFTPGO_DATA_PROVIDER__NAME: '' tests-upload-windows: name: Run tests and upload build artifact on Windows runs-on: windows-latest steps: - uses: actions/checkout@v2 - name: Install Go uses: actions/setup-go@v2 with: go-version: 1.14 - name: Build run: | $GIT_COMMIT = (git describe --always --dirty) | Out-String $DATE_TIME = ([datetime]::Now.ToUniversalTime().toString("yyyy-MM-ddTHH:mm:ssZ")) | Out-String go build -i -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.exe initprovider - name: Run test cases using SQLite provider run: go test -v ./... -coverprofile=coverage.txt -covermode=atomic - name: Prepare artifact run: | mkdir output xcopy .\sftpgo.exe .\output xcopy .\sftpgo.json .\output mkdir output\templates xcopy .\templates .\output\templates\ /E mkdir output\static xcopy .\static .\output\static\ /E - name: Upload artifact uses: actions/upload-artifact@v2 with: name: sftpgo-windows path: output - name: Run test cases using bolt provider run: | go test -v ./config -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: '' tests-postgresql-mysql: name: Run test cases using PostgreSQL/MySQL data providers 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: Install Go uses: actions/setup-go@v2 with: go-version: 1.14 - name: Build run: go build -i -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