WIP #140
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
--- | |
# Github Actions build for rclone | |
# -*- compile-command: "yamllint -f parsable build.yml" -*- | |
name: build | |
# Trigger the workflow on push or pull request | |
on: | |
push: | |
branches: | |
- '*' | |
tags: | |
- '*' | |
pull_request: | |
jobs: | |
build: | |
timeout-minutes: 60 | |
strategy: | |
fail-fast: false | |
matrix: | |
job_name: ['linux', 'mac', 'windows_amd64', 'windows_386', 'other_os', 'go1.12', 'go1.13', 'go1.14', 'go1.16'] | |
include: | |
- job_name: linux | |
os: ubuntu-latest | |
go: '1.15.x' | |
gotags: cmount | |
build_flags: '-include "^linux/"' | |
check: true | |
quicktest: true | |
racequicktest: true | |
deploy: true | |
- job_name: mac | |
os: macOS-latest | |
go: '1.15.x' | |
gotags: 'cmount' | |
build_flags: '-include "^darwin/amd64" -cgo' | |
quicktest: true | |
racequicktest: true | |
deploy: true | |
- job_name: windows_amd64 | |
os: windows-latest | |
go: '1.15.x' | |
gotags: cmount | |
build_flags: '-include "^windows/amd64" -cgo' | |
build_args: '-buildmode exe' | |
quicktest: true | |
racequicktest: true | |
deploy: true | |
- job_name: windows_386 | |
os: windows-latest | |
go: '1.15.x' | |
gotags: cmount | |
goarch: '386' | |
cgo: '1' | |
build_flags: '-include "^windows/386" -cgo' | |
build_args: '-buildmode exe' | |
quicktest: true | |
deploy: true | |
- job_name: other_os | |
os: ubuntu-latest | |
go: '1.15.x' | |
build_flags: '-exclude "^(windows/|darwin/amd64|linux/)"' | |
compile_all: true | |
deploy: true | |
- job_name: go1.12 | |
os: ubuntu-latest | |
go: '1.12.x' | |
quicktest: true | |
- job_name: go1.13 | |
os: ubuntu-latest | |
go: '1.13.x' | |
quicktest: true | |
- job_name: go1.14 | |
os: ubuntu-latest | |
go: '1.14.x' | |
quicktest: true | |
racequicktest: true | |
- job_name: go1.16 | |
os: ubuntu-latest | |
go: '1.16.0-rc1' | |
quicktest: true | |
racequicktest: true | |
name: ${{ matrix.job_name }} | |
runs-on: ${{ matrix.os }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v2 | |
with: | |
fetch-depth: 0 | |
- name: Install Go | |
uses: actions/setup-go@v2 | |
with: | |
stable: 'false' | |
go-version: ${{ matrix.go }} | |
- name: Set environment variables | |
shell: bash | |
run: | | |
echo 'GOTAGS=${{ matrix.gotags }}' >> $GITHUB_ENV | |
echo 'BUILD_FLAGS=${{ matrix.build_flags }}' >> $GITHUB_ENV | |
echo 'BUILD_ARGS=${{ matrix.build_args }}' >> $GITHUB_ENV | |
if [[ "${{ matrix.goarch }}" != "" ]]; then echo 'GOARCH=${{ matrix.goarch }}' >> $GITHUB_ENV ; fi | |
if [[ "${{ matrix.cgo }}" != "" ]]; then echo 'CGO_ENABLED=${{ matrix.cgo }}' >> $GITHUB_ENV ; fi | |
- name: Install Libraries on Linux | |
shell: bash | |
run: | | |
sudo modprobe fuse | |
sudo chmod 666 /dev/fuse | |
sudo chown root:$USER /etc/fuse.conf | |
sudo apt-get install fuse libfuse-dev rpm pkg-config | |
if: matrix.os == 'ubuntu-latest' | |
- name: Install Libraries on macOS | |
shell: bash | |
run: | | |
brew update | |
brew install --cask osxfuse | |
if: matrix.os == 'macOS-latest' | |
- name: Install Libraries on Windows | |
shell: powershell | |
run: | | |
$ProgressPreference = 'SilentlyContinue' | |
choco install -y winfsp zip | |
echo "CPATH=C:\Program Files\WinFsp\inc\fuse;C:\Program Files (x86)\WinFsp\inc\fuse" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append | |
if ($env:GOARCH -eq "386") { | |
choco install -y mingw --forcex86 --force | |
echo "C:\\ProgramData\\chocolatey\\lib\\mingw\\tools\\install\\mingw32\\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append | |
} | |
# Copy mingw32-make.exe to make.exe so the same command line | |
# can be used on Windows as on macOS and Linux | |
$path = (get-command mingw32-make.exe).Path | |
Copy-Item -Path $path -Destination (Join-Path (Split-Path -Path $path) 'make.exe') | |
if: matrix.os == 'windows-latest' | |
- name: Print Go version and environment | |
shell: bash | |
run: | | |
printf "Using go at: $(which go)\n" | |
printf "Go version: $(go version)\n" | |
printf "\n\nGo environment:\n\n" | |
go env | |
printf "\n\nRclone environment:\n\n" | |
make vars | |
printf "\n\nSystem environment:\n\n" | |
env | |
- name: Go module cache | |
uses: actions/cache@v2 | |
with: | |
path: ~/go/pkg/mod | |
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} | |
restore-keys: | | |
${{ runner.os }}-go- | |
- name: Build rclone | |
shell: bash | |
run: | | |
make | |
- name: Run tests | |
shell: bash | |
run: | | |
make quicktest | |
if: matrix.quicktest | |
- name: Race test | |
shell: bash | |
run: | | |
make racequicktest | |
if: matrix.racequicktest | |
- name: Code quality test | |
shell: bash | |
run: | | |
make build_dep | |
make check | |
if: matrix.check | |
- name: Compile all architectures test | |
shell: bash | |
run: | | |
make | |
make compile_all | |
if: matrix.compile_all | |
- name: Deploy built binaries | |
shell: bash | |
run: | | |
if [[ "${{ matrix.os }}" == "ubuntu-latest" ]]; then make release_dep_linux ; fi | |
if [[ "${{ matrix.os }}" == "windows-latest" ]]; then make release_dep_windows ; fi | |
make ci_beta | |
env: | |
RCLONE_CONFIG_PASS: ${{ secrets.RCLONE_CONFIG_PASS }} | |
# working-directory: '$(modulePath)' | |
# Deploy binaries if enabled in config && not a PR && not a fork | |
if: matrix.deploy && github.head_ref == '' && github.repository == 'rclone/rclone' | |
xgo: | |
timeout-minutes: 60 | |
name: "xgo cross compile" | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v1 | |
with: | |
# Checkout into a fixed path to avoid import path problems on go < 1.11 | |
path: ./src/github.com/rclone/rclone | |
- name: Set environment variables | |
shell: bash | |
run: | | |
echo 'GOPATH=${{ runner.workspace }}' >> $GITHUB_ENV | |
echo '${{ runner.workspace }}/bin' >> $GITHUB_PATH | |
- name: Cross-compile rclone | |
run: | | |
docker pull billziss/xgo-cgofuse | |
GO111MODULE=off go get -v github.com/karalabe/xgo # don't add to go.mod | |
# xgo \ | |
# -image=billziss/xgo-cgofuse \ | |
# -targets=darwin/amd64,linux/386,linux/amd64,windows/386,windows/amd64 \ | |
# -tags cmount \ | |
# -dest build \ | |
# . | |
xgo \ | |
-image=billziss/xgo-cgofuse \ | |
-targets=android/*,ios/* \ | |
-dest build \ | |
. | |
- name: Build rclone | |
shell: bash | |
run: | | |
make | |
- name: Upload artifacts | |
run: | | |
make ci_upload | |
env: | |
RCLONE_CONFIG_PASS: ${{ secrets.RCLONE_CONFIG_PASS }} | |
# Upload artifacts if not a PR && not a fork | |
if: github.head_ref == '' && github.repository == 'rclone/rclone' |