2019-09-19 10:28:09 +00:00
---
# 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 :
2023-03-16 16:33:50 +00:00
- '**'
2019-09-19 10:28:09 +00:00
tags :
2023-03-16 16:33:50 +00:00
- '**'
2019-09-19 10:28:09 +00:00
pull_request :
2021-04-26 16:52:03 +00:00
workflow_dispatch :
inputs :
manual :
2023-01-21 23:54:02 +00:00
description : Manual run (bypass default conditions)
type : boolean
2021-04-26 16:52:03 +00:00
required : true
default : true
2019-09-19 10:28:09 +00:00
jobs :
build :
2023-02-01 14:50:42 +00:00
if : ${{ github.event.inputs.manual == 'true' || (github.repository == 'rclone/rclone' && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name)) }}
2019-09-19 10:28:09 +00:00
timeout-minutes : 60
strategy :
fail-fast : false
matrix :
2024-01-13 17:00:04 +00:00
job_name : [ 'linux' , 'linux_386' , 'mac_amd64' , 'mac_arm64' , 'windows' , 'other_os' , 'go1.20' , 'go1.21' ]
2019-09-19 10:28:09 +00:00
include :
- job_name : linux
os : ubuntu-latest
2024-01-13 17:00:04 +00:00
go : '>=1.22.0-rc.1'
2019-09-19 10:28:09 +00:00
gotags : cmount
build_flags : '-include "^linux/"'
check : true
quicktest : true
2020-07-24 10:44:51 +00:00
racequicktest : true
2021-03-30 10:37:59 +00:00
librclonetest : true
2019-09-19 10:28:09 +00:00
deploy : true
2022-07-13 14:59:24 +00:00
- job_name : linux_386
os : ubuntu-latest
2024-01-13 17:00:04 +00:00
go : '>=1.22.0-rc.1'
2022-07-13 14:59:24 +00:00
goarch : 386
gotags : cmount
quicktest : true
2021-02-05 10:20:19 +00:00
- job_name : mac_amd64
2024-04-04 22:30:46 +00:00
os : macos-latest
2024-01-13 17:00:04 +00:00
go : '>=1.22.0-rc.1'
2020-07-03 20:36:21 +00:00
gotags : 'cmount'
2019-09-19 10:28:09 +00:00
build_flags : '-include "^darwin/amd64" -cgo'
quicktest : true
racequicktest : true
deploy : true
2021-02-05 10:20:19 +00:00
- job_name : mac_arm64
2024-04-04 22:30:46 +00:00
os : macos-latest
2024-01-13 17:00:04 +00:00
go : '>=1.22.0-rc.1'
2021-02-05 10:20:19 +00:00
gotags : 'cmount'
2022-01-26 17:55:38 +00:00
build_flags : '-include "^darwin/arm64" -cgo -macos-arch arm64 -cgo-cflags=-I/usr/local/include -cgo-ldflags=-L/usr/local/lib'
2021-02-05 10:20:19 +00:00
deploy : true
2022-04-22 16:46:12 +00:00
- job_name : windows
2019-09-19 10:28:09 +00:00
os : windows-latest
2024-01-13 17:00:04 +00:00
go : '>=1.22.0-rc.1'
2019-09-19 10:28:09 +00:00
gotags : cmount
2022-04-22 16:46:12 +00:00
cgo : '0'
build_flags : '-include "^windows/"'
2020-11-29 16:52:10 +00:00
build_args : '-buildmode exe'
2019-09-19 10:28:09 +00:00
quicktest : true
deploy : true
- job_name : other_os
os : ubuntu-latest
2024-01-13 17:00:04 +00:00
go : '>=1.22.0-rc.1'
2022-04-22 16:46:12 +00:00
build_flags : '-exclude "^(windows/|darwin/|linux/)"'
2019-09-19 10:28:09 +00:00
compile_all : true
deploy : true
2024-01-13 17:00:04 +00:00
- job_name : go1.20
2021-01-08 12:22:37 +00:00
os : ubuntu-latest
2024-01-13 17:00:04 +00:00
go : '1.20'
2021-01-08 12:22:37 +00:00
quicktest : true
racequicktest : true
2024-01-13 17:00:04 +00:00
- job_name : go1.21
2021-08-15 15:42:51 +00:00
os : ubuntu-latest
2024-01-13 17:00:04 +00:00
go : '1.21'
2021-08-15 15:42:51 +00:00
quicktest : true
racequicktest : true
2019-09-19 10:28:09 +00:00
name : ${{ matrix.job_name }}
runs-on : ${{ matrix.os }}
steps :
- name : Checkout
2023-09-04 22:14:49 +00:00
uses : actions/checkout@v4
2019-09-19 10:28:09 +00:00
with :
2020-07-24 10:44:51 +00:00
fetch-depth : 0
2019-09-19 10:28:09 +00:00
- name : Install Go
2023-12-06 22:48:34 +00:00
uses : actions/setup-go@v5
2019-09-19 10:28:09 +00:00
with :
go-version : ${{ matrix.go }}
2022-03-17 17:14:50 +00:00
check-latest : true
2019-09-19 10:28:09 +00:00
- name : Set environment variables
shell : bash
run : |
2020-10-26 11:19:06 +00:00
echo 'GOTAGS=${{ matrix.gotags }}' >> $GITHUB_ENV
echo 'BUILD_FLAGS=${{ matrix.build_flags }}' >> $GITHUB_ENV
2020-11-29 16:52:10 +00:00
echo 'BUILD_ARGS=${{ matrix.build_args }}' >> $GITHUB_ENV
2020-10-26 11:19:06 +00:00
if [[ "${{ matrix.goarch }}" != "" ]]; then echo 'GOARCH=${{ matrix.goarch }}' >> $GITHUB_ENV ; fi
if [[ "${{ matrix.cgo }}" != "" ]]; then echo 'CGO_ENABLED=${{ matrix.cgo }}' >> $GITHUB_ENV ; fi
2019-09-19 10:28:09 +00:00
- name : Install Libraries on Linux
shell : bash
run : |
sudo modprobe fuse
sudo chmod 666 /dev/fuse
sudo chown root:$USER /etc/fuse.conf
2024-04-01 21:41:46 +00:00
sudo apt-get install fuse3 libfuse-dev rpm pkg-config git-annex
2019-09-19 10:28:09 +00:00
if : matrix.os == 'ubuntu-latest'
- name : Install Libraries on macOS
shell : bash
run : |
2023-06-23 08:50:01 +00:00
# https://github.com/Homebrew/brew/issues/15621#issuecomment-1619266788
# https://github.com/orgs/Homebrew/discussions/4612#discussioncomment-6319008
unset HOMEBREW_NO_INSTALL_FROM_API
brew untap --force homebrew/core
brew untap --force homebrew/cask
2019-09-19 10:28:09 +00:00
brew update
2021-02-05 16:07:59 +00:00
brew install --cask macfuse
2024-04-01 21:41:46 +00:00
brew install git-annex
2024-04-04 22:30:46 +00:00
if : matrix.os == 'macos-latest'
2019-09-19 10:28:09 +00:00
- name : Install Libraries on Windows
shell : powershell
run : |
$ProgressPreference = 'SilentlyContinue'
choco install -y winfsp zip
2020-10-26 11:19:06 +00:00
echo "CPATH=C:\Program Files\WinFsp\inc\fuse;C:\Program Files (x86)\WinFsp\inc\fuse" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
2019-09-19 10:28:09 +00:00
if ($env:GOARCH -eq "386") {
choco install -y mingw --forcex86 --force
2020-10-26 11:19:06 +00:00
echo "C:\\ProgramData\\chocolatey\\lib\\mingw\\tools\\install\\mingw32\\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
2019-09-19 10:28:09 +00:00
}
# 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
2020-07-24 10:44:51 +00:00
- name : Build rclone
2019-09-19 10:28:09 +00:00
shell : bash
run : |
make
2020-07-24 10:44:51 +00:00
2022-04-24 09:37:46 +00:00
- name : Rclone version
shell : bash
run : |
rclone version
2020-07-24 10:44:51 +00:00
- name : Run tests
shell : bash
run : |
2019-09-19 10:28:09 +00:00
make quicktest
if : matrix.quicktest
- name : Race test
shell : bash
run : |
make racequicktest
if : matrix.racequicktest
2021-03-30 10:37:59 +00:00
- name : Run librclone tests
shell : bash
run : |
make -C librclone/ctest test
make -C librclone/ctest clean
2021-04-28 15:53:35 +00:00
librclone/python/test_rclone.py
2021-03-30 10:37:59 +00:00
if : matrix.librclonetest
2019-09-19 10:28:09 +00:00
- name : Compile all architectures test
shell : bash
run : |
make
make compile_all
if : matrix.compile_all
- name : Deploy built binaries
shell : bash
run : |
2020-06-15 17:27:20 +00:00
if [[ "${{ matrix.os }}" == "ubuntu-latest" ]]; then make release_dep_linux ; fi
make ci_beta
2019-09-19 10:28:09 +00:00
env :
RCLONE_CONFIG_PASS : ${{ secrets.RCLONE_CONFIG_PASS }}
# working-directory: '$(modulePath)'
2020-01-08 17:27:44 +00:00
# Deploy binaries if enabled in config && not a PR && not a fork
2023-03-17 12:11:41 +00:00
if : env.RCLONE_CONFIG_PASS != '' && matrix.deploy && github.head_ref == '' && github.repository == 'rclone/rclone'
2019-09-25 14:36:19 +00:00
2021-10-14 16:23:19 +00:00
lint :
2023-02-01 14:50:42 +00:00
if : ${{ github.event.inputs.manual == 'true' || (github.repository == 'rclone/rclone' && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name)) }}
2021-10-14 16:23:19 +00:00
timeout-minutes : 30
name : "lint"
runs-on : ubuntu-latest
steps :
- name : Checkout
2023-09-04 22:14:49 +00:00
uses : actions/checkout@v4
2021-10-14 16:23:19 +00:00
2022-10-23 12:27:56 +00:00
- name : Install Go
2023-12-06 22:48:34 +00:00
uses : actions/setup-go@v5
2022-10-23 12:27:56 +00:00
with :
2024-01-13 17:00:04 +00:00
go-version : '>=1.22.0-rc.1'
2022-10-23 12:27:56 +00:00
check-latest : true
2024-04-18 07:42:16 +00:00
cache : false
- name : Code quality test (Linux)
uses : golangci/golangci-lint-action@v4
with :
version : latest
skip-cache : false # Caching enabled (which is default) on this first lint step only, it handles complete cache of build, go modules and golangci-lint analysis which was necessary to get all lint steps to properly take advantage of it
- name : Code quality test (Windows)
uses : golangci/golangci-lint-action@v4
env :
GOOS : "windows"
with :
version : latest
skip-cache : true
- name : Code quality test (macOS)
uses : golangci/golangci-lint-action@v4
env :
GOOS : "darwin"
with :
version : latest
skip-cache : true
- name : Code quality test (FreeBSD)
uses : golangci/golangci-lint-action@v4
env :
GOOS : "freebsd"
with :
version : latest
skip-cache : true
- name : Code quality test (OpenBSD)
uses : golangci/golangci-lint-action@v4
env :
GOOS : "openbsd"
with :
version : latest
skip-cache : true
2022-10-23 12:27:56 +00:00
- name : Install govulncheck
run : go install golang.org/x/vuln/cmd/govulncheck@latest
- name : Scan for vulnerabilities
run : govulncheck ./...
2021-03-17 17:00:16 +00:00
android :
2023-02-01 14:50:42 +00:00
if : ${{ github.event.inputs.manual == 'true' || (github.repository == 'rclone/rclone' && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name)) }}
2021-10-15 11:35:21 +00:00
timeout-minutes : 30
name : "android-all"
runs-on : ubuntu-latest
steps :
- name : Checkout
2023-09-04 22:14:49 +00:00
uses : actions/checkout@v4
2021-10-15 11:35:21 +00:00
with :
fetch-depth : 0
# Upgrade together with NDK version
2022-04-01 17:30:42 +00:00
- name : Set up Go
2023-12-06 22:48:34 +00:00
uses : actions/setup-go@v5
2021-10-15 11:35:21 +00:00
with :
2024-01-13 17:00:04 +00:00
go-version : '>=1.22.0-rc.1'
2021-10-15 11:35:21 +00:00
- name : Set global environment variables
shell : bash
run : |
echo "VERSION=$(make version)" >> $GITHUB_ENV
- name : build native rclone
run : |
make
- name : install gomobile
run : |
2022-04-01 17:30:42 +00:00
go install golang.org/x/mobile/cmd/gobind@latest
go install golang.org/x/mobile/cmd/gomobile@latest
2021-10-15 11:35:21 +00:00
env PATH=$PATH:~/go/bin gomobile init
2022-08-03 14:03:15 +00:00
echo "RCLONE_NDK_VERSION=21" >> $GITHUB_ENV
2021-10-15 11:35:21 +00:00
- name : arm-v7a gomobile build
2022-08-03 14:03:15 +00:00
run : env PATH=$PATH:~/go/bin gomobile bind -androidapi ${RCLONE_NDK_VERSION} -v -target=android/arm -javapkg=org.rclone -ldflags '-s -X github.com/rclone/rclone/fs.Version='${VERSION} github.com/rclone/rclone/librclone/gomobile
2021-10-15 11:35:21 +00:00
- name : arm-v7a Set environment variables
shell : bash
run : |
2022-08-03 14:03:15 +00:00
echo "CC=$(echo $ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi${RCLONE_NDK_VERSION}-clang)" >> $GITHUB_ENV
2021-10-15 11:35:21 +00:00
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
2022-08-03 14:03:15 +00:00
2021-10-15 11:35:21 +00:00
- name : arm-v7a build
2022-08-03 14:03:15 +00:00
run : go build -v -tags android -trimpath -ldflags '-s -X github.com/rclone/rclone/fs.Version='${VERSION} -o build/rclone-android-${RCLONE_NDK_VERSION}-armv7a .
2021-10-15 11:35:21 +00:00
- name : arm64-v8a Set environment variables
shell : bash
run : |
2022-08-03 14:03:15 +00:00
echo "CC=$(echo $ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android${RCLONE_NDK_VERSION}-clang)" >> $GITHUB_ENV
2021-10-15 11:35:21 +00:00
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
2022-08-03 14:03:15 +00:00
run : go build -v -tags android -trimpath -ldflags '-s -X github.com/rclone/rclone/fs.Version='${VERSION} -o build/rclone-android-${RCLONE_NDK_VERSION}-armv8a .
2021-10-15 11:35:21 +00:00
- name : x86 Set environment variables
shell : bash
run : |
2022-08-03 14:03:15 +00:00
echo "CC=$(echo $ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/i686-linux-android${RCLONE_NDK_VERSION}-clang)" >> $GITHUB_ENV
2021-10-15 11:35:21 +00:00
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
2022-08-03 14:03:15 +00:00
run : go build -v -tags android -trimpath -ldflags '-s -X github.com/rclone/rclone/fs.Version='${VERSION} -o build/rclone-android-${RCLONE_NDK_VERSION}-x86 .
2021-10-15 11:35:21 +00:00
- name : x64 Set environment variables
shell : bash
run : |
2022-08-03 14:03:15 +00:00
echo "CC=$(echo $ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linux-android${RCLONE_NDK_VERSION}-clang)" >> $GITHUB_ENV
2021-10-15 11:35:21 +00:00
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
2022-08-03 14:03:15 +00:00
run : go build -v -tags android -trimpath -ldflags '-s -X github.com/rclone/rclone/fs.Version='${VERSION} -o build/rclone-android-${RCLONE_NDK_VERSION}-x64 .
2021-10-15 11:35:21 +00:00
- name : Upload artifacts
run : |
make ci_upload
env :
RCLONE_CONFIG_PASS : ${{ secrets.RCLONE_CONFIG_PASS }}
# Upload artifacts if not a PR && not a fork
2023-03-17 12:11:41 +00:00
if : env.RCLONE_CONFIG_PASS != '' && github.head_ref == '' && github.repository == 'rclone/rclone'