c968c3e41c
This was necessary because go1.14 seems to have a modules related bug which means it tries to build modules even though the uses of them are all disabled with build constraints. This seems to be fixed in go1.15.
341 lines
11 KiB
YAML
341 lines
11 KiB
YAML
---
|
|
# 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:
|
|
workflow_dispatch:
|
|
inputs:
|
|
manual:
|
|
required: true
|
|
default: true
|
|
|
|
jobs:
|
|
build:
|
|
if: ${{ github.repository == 'rclone/rclone' || github.event.inputs.manual }}
|
|
timeout-minutes: 60
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
job_name: ['linux', 'mac_amd64', 'mac_arm64', 'windows_amd64', 'windows_386', 'other_os', 'go1.15', 'go1.16']
|
|
|
|
include:
|
|
- job_name: linux
|
|
os: ubuntu-latest
|
|
go: '1.17.x'
|
|
gotags: cmount
|
|
build_flags: '-include "^linux/"'
|
|
check: true
|
|
quicktest: true
|
|
racequicktest: true
|
|
librclonetest: true
|
|
deploy: true
|
|
|
|
- job_name: mac_amd64
|
|
os: macOS-latest
|
|
go: '1.17.x'
|
|
gotags: 'cmount'
|
|
build_flags: '-include "^darwin/amd64" -cgo'
|
|
quicktest: true
|
|
racequicktest: true
|
|
deploy: true
|
|
|
|
- job_name: mac_arm64
|
|
os: macOS-latest
|
|
go: '1.17.x'
|
|
gotags: 'cmount'
|
|
build_flags: '-include "^darwin/arm64" -cgo -macos-arch arm64 -macos-sdk macosx11.1 -cgo-cflags=-I/usr/local/include -cgo-ldflags=-L/usr/local/lib'
|
|
deploy: true
|
|
|
|
- job_name: windows_amd64
|
|
os: windows-latest
|
|
go: '1.17.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.17.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.17.x'
|
|
build_flags: '-exclude "^(windows/|darwin/|linux/)"'
|
|
compile_all: true
|
|
deploy: true
|
|
|
|
- job_name: go1.15
|
|
os: ubuntu-latest
|
|
go: '1.15.x'
|
|
quicktest: true
|
|
racequicktest: true
|
|
|
|
- job_name: go1.16
|
|
os: ubuntu-latest
|
|
go: '1.16.x'
|
|
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 macfuse
|
|
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: Run librclone tests
|
|
shell: bash
|
|
run: |
|
|
make -C librclone/ctest test
|
|
make -C librclone/ctest clean
|
|
librclone/python/test_rclone.py
|
|
if: matrix.librclonetest
|
|
|
|
- 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'
|
|
|
|
lint:
|
|
if: ${{ github.repository == 'rclone/rclone' || github.event.inputs.manual }}
|
|
timeout-minutes: 30
|
|
name: "lint"
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v2
|
|
|
|
- name: Code quality test
|
|
uses: golangci/golangci-lint-action@v2
|
|
with:
|
|
# Optional: version of golangci-lint to use in form of v1.2 or v1.2.3 or `latest` to use the latest version
|
|
version: latest
|
|
|
|
android:
|
|
if: ${{ github.repository == 'rclone/rclone' || github.event.inputs.manual }}
|
|
timeout-minutes: 30
|
|
name: "android-all"
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v2
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
# Upgrade together with NDK version
|
|
- name: Set up Go 1.16
|
|
uses: actions/setup-go@v1
|
|
with:
|
|
go-version: 1.16
|
|
|
|
# Upgrade together with Go version. Using a GitHub-provided version saves around 2 minutes.
|
|
- name: Force NDK version
|
|
run: echo "y" | sudo ${ANDROID_HOME}/tools/bin/sdkmanager --install "ndk;22.1.7171670" | grep -v = || true
|
|
|
|
- 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: Set global environment variables
|
|
shell: bash
|
|
run: |
|
|
echo "VERSION=$(make version)" >> $GITHUB_ENV
|
|
|
|
- name: build native rclone
|
|
run: |
|
|
make
|
|
|
|
- name: install gomobile
|
|
run: |
|
|
go get golang.org/x/mobile/cmd/gobind
|
|
go get golang.org/x/mobile/cmd/gomobile
|
|
env PATH=$PATH:~/go/bin gomobile init
|
|
|
|
- name: arm-v7a gomobile build
|
|
run: env PATH=$PATH:~/go/bin gomobile bind -v -target=android/arm -javapkg=org.rclone -ldflags '-s -X github.com/rclone/rclone/fs.Version='${VERSION} github.com/rclone/rclone/librclone/gomobile
|
|
|
|
- name: arm-v7a Set environment variables
|
|
shell: bash
|
|
run: |
|
|
echo "CC=$(echo $ANDROID_HOME/ndk/22.1.7171670/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi16-clang)" >> $GITHUB_ENV
|
|
echo "CC_FOR_TARGET=$CC" >> $GITHUB_ENV
|
|
echo 'GOOS=android' >> $GITHUB_ENV
|
|
echo 'GOARCH=arm' >> $GITHUB_ENV
|
|
echo 'GOARM=7' >> $GITHUB_ENV
|
|
echo 'CGO_ENABLED=1' >> $GITHUB_ENV
|
|
echo 'CGO_LDFLAGS=-fuse-ld=lld -s -w' >> $GITHUB_ENV
|
|
- name: arm-v7a build
|
|
run: go build -v -tags android -trimpath -ldflags '-s -X github.com/rclone/rclone/fs.Version='${VERSION} -o build/rclone-android-16-armv7a .
|
|
|
|
- name: arm64-v8a Set environment variables
|
|
shell: bash
|
|
run: |
|
|
echo "CC=$(echo $ANDROID_HOME/ndk/22.1.7171670/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang)" >> $GITHUB_ENV
|
|
echo "CC_FOR_TARGET=$CC" >> $GITHUB_ENV
|
|
echo 'GOOS=android' >> $GITHUB_ENV
|
|
echo 'GOARCH=arm64' >> $GITHUB_ENV
|
|
echo 'CGO_ENABLED=1' >> $GITHUB_ENV
|
|
echo 'CGO_LDFLAGS=-fuse-ld=lld -s -w' >> $GITHUB_ENV
|
|
|
|
- name: arm64-v8a build
|
|
run: go build -v -tags android -trimpath -ldflags '-s -X github.com/rclone/rclone/fs.Version='${VERSION} -o build/rclone-android-21-armv8a .
|
|
|
|
- name: x86 Set environment variables
|
|
shell: bash
|
|
run: |
|
|
echo "CC=$(echo $ANDROID_HOME/ndk/22.1.7171670/toolchains/llvm/prebuilt/linux-x86_64/bin/i686-linux-android16-clang)" >> $GITHUB_ENV
|
|
echo "CC_FOR_TARGET=$CC" >> $GITHUB_ENV
|
|
echo 'GOOS=android' >> $GITHUB_ENV
|
|
echo 'GOARCH=386' >> $GITHUB_ENV
|
|
echo 'CGO_ENABLED=1' >> $GITHUB_ENV
|
|
echo 'CGO_LDFLAGS=-fuse-ld=lld -s -w' >> $GITHUB_ENV
|
|
|
|
- name: x86 build
|
|
run: go build -v -tags android -trimpath -ldflags '-s -X github.com/rclone/rclone/fs.Version='${VERSION} -o build/rclone-android-16-x86 .
|
|
|
|
- name: x64 Set environment variables
|
|
shell: bash
|
|
run: |
|
|
echo "CC=$(echo $ANDROID_HOME/ndk/22.1.7171670/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linux-android21-clang)" >> $GITHUB_ENV
|
|
echo "CC_FOR_TARGET=$CC" >> $GITHUB_ENV
|
|
echo 'GOOS=android' >> $GITHUB_ENV
|
|
echo 'GOARCH=amd64' >> $GITHUB_ENV
|
|
echo 'CGO_ENABLED=1' >> $GITHUB_ENV
|
|
echo 'CGO_LDFLAGS=-fuse-ld=lld -s -w' >> $GITHUB_ENV
|
|
|
|
- name: x64 build
|
|
run: go build -v -tags android -trimpath -ldflags '-s -X github.com/rclone/rclone/fs.Version='${VERSION} -o build/rclone-android-21-x64 .
|
|
|
|
- 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'
|