Merge remote-tracking branch 'upstream/master' #119
Workflow file for this run
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
name: build | |
on: | |
push: | |
tags: | |
- '**' | |
env: | |
IMAGE: tgdrive/rclone | |
jobs: | |
build: | |
timeout-minutes: 60 | |
strategy: | |
fail-fast: false | |
matrix: | |
job_name: ['linux', 'windows'] | |
include: | |
- job_name: linux | |
os: ubuntu-latest | |
go: '>=1.23.0-rc.1' | |
gotags: cmount | |
cgo: '0' | |
build_flags: '-include "^(linux/amd64|linux/arm64|linux/arm-v7)"' | |
- job_name: windows | |
os: windows-latest | |
go: '>=1.23.0-rc.1' | |
gotags: cmount | |
cgo: '0' | |
build_flags: '-include "^(windows/amd64|windows/arm64)"' | |
build_args: '-buildmode exe' | |
- job_name: mac_amd64 | |
os: macos-latest | |
go: '>=1.23.0-rc.1' | |
gotags: 'cmount' | |
build_flags: '-include "^darwin/amd64" -cgo' | |
- job_name: mac_arm64 | |
os: macos-latest | |
go: '>=1.23.0-rc.1' | |
gotags: 'cmount' | |
build_flags: '-include "^darwin/arm64" -cgo -macos-arch arm64 -cgo-cflags=-I/usr/local/include -cgo-ldflags=-L/usr/local/lib' | |
name: ${{ matrix.job_name }} | |
runs-on: ${{ matrix.os }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Install Go | |
uses: actions/setup-go@v5 | |
with: | |
go-version: ${{ matrix.go }} | |
check-latest: true | |
- 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.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 fuse3 libfuse-dev rpm pkg-config git-annex git-annex-remote-rclone nfs-common | |
if: matrix.os == 'ubuntu-latest' | |
- name: Install Libraries on macOS | |
shell: bash | |
run: | | |
# 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 | |
brew update | |
brew install --cask macfuse | |
brew install git-annex git-annex-remote-rclone | |
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: Build rclone | |
shell: bash | |
run: | | |
if [[ "${{ matrix.os }}" == "ubuntu-latest" ]]; then make release_dep_linux ; fi | |
make cross | |
- name: Upload Binary | |
uses: actions/upload-artifact@v4 | |
with: | |
name: rclone-${{ matrix.job_name }} | |
path: ${{ github.workspace }}/build/**/* | |
retention-days: 1 | |
android: | |
timeout-minutes: 30 | |
name: "android-all" | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Set up Go | |
uses: actions/setup-go@v5 | |
with: | |
go-version: '>=1.23.0-rc.1' | |
- name: Go module cache | |
uses: actions/cache@v4 | |
with: | |
path: ~/go/pkg/mod | |
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} | |
restore-keys: | | |
${{ runner.os }}-go- | |
- name: install gomobile | |
run: | | |
go install golang.org/x/mobile/cmd/gobind@latest | |
go install golang.org/x/mobile/cmd/gomobile@latest | |
env PATH=$PATH:~/go/bin gomobile init | |
echo "RCLONE_NDK_VERSION=21" >> $GITHUB_ENV | |
- name: arm-v7a gomobile build | |
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='${{ github.ref_name }} github.com/rclone/rclone/librclone/gomobile | |
- name: arm-v7a Set environment variables | |
shell: bash | |
run: | | |
echo "CC=$(echo $ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi${RCLONE_NDK_VERSION}-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 Set environment variables | |
shell: bash | |
run: | | |
echo "CC=$(echo $ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi${RCLONE_NDK_VERSION}-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='${{ github.ref_name }} -o build/rclone-armv7a . | |
- name: arm64-v8a Set environment variables | |
shell: bash | |
run: | | |
echo "CC=$(echo $ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android${RCLONE_NDK_VERSION}-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='${{ github.ref_name }} -o build/rclone-armv8a . | |
- name: Package into Zip | |
run: | | |
cd build | |
mv rclone-armv7a rclone | |
zip -r rclone-${{ github.ref_name }}-android-arm.zip rclone | |
mv rclone-armv8a rclone | |
zip -r rclone-${{ github.ref_name }}-android-arm64.zip rclone | |
- name: Upload Artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: rclone-android | |
path: ${{ github.workspace }}/build/rclone-*.zip | |
retention-days: 1 | |
release: | |
name: Create Release | |
runs-on: ubuntu-latest | |
needs: [build,android] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Download All Artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
path: /tmp/build | |
pattern: rclone-* | |
merge-multiple: true | |
- name: Copy Artifacts | |
run: | | |
mkdir build | |
cp -r /tmp/build/* build/ | |
- name: Upload Assets | |
shell: bash | |
env: | |
GH_TOKEN: ${{ github.token }} | |
run: | | |
make upload_github | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
- name: Login to GitHub Container Registry | |
uses: docker/login-action@v3 | |
with: | |
registry: ghcr.io | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Set Docker metadata | |
id: docker_meta | |
uses: docker/metadata-action@v5 | |
with: | |
images: ${{ env.IMAGE }} | |
labels: | | |
org.opencontainers.image.version=${{ github.ref_name}} | |
org.opencontainers.image.revision=${{ github.sha }} | |
org.opencontainers.image.title=${{ env.IMAGE }} | |
org.opencontainers.image.description=Rclone Docker Image | |
- name: Publish to Docker | |
uses: docker/build-push-action@v6 | |
with: | |
context: . | |
push: true | |
platforms: linux/amd64,linux/arm64,linux/arm/v7 | |
build-args: | | |
VERSION=${{ github.ref_name}} | |
labels: ${{ steps.docker_meta.outputs.labels }} | |
tags: | | |
ghcr.io/${{ env.IMAGE }}:${{ github.ref_name}} | |
ghcr.io/${{ env.IMAGE }}:latest | |
- name: Publish Docker Plugin | |
run: | | |
VER=${GITHUB_REF_NAME} | |
PLUGIN_USER=ghcr.io/tgdrive | |
for PLUGIN_ARCH in amd64 arm64 arm/v7 ;do | |
export PLUGIN_ARCH | |
export PLUGIN_USER | |
make docker-plugin PLUGIN_TAG=${PLUGIN_ARCH/\//-} | |
make docker-plugin PLUGIN_TAG=${PLUGIN_ARCH/\//-}-${VER#v} | |
done | |
make docker-plugin PLUGIN_ARCH=amd64 PLUGIN_TAG=latest | |
make docker-plugin PLUGIN_ARCH=amd64 PLUGIN_TAG=${VER#v} |