diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index eb1ee376e..7a8ae0850 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -213,50 +213,89 @@ jobs: # 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 + android: + timeout-minutes: 30 + name: "android-all" + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v2 - steps: + # Upgrade together with NDK version + - name: Set up Go 1.14 + uses: actions/setup-go@v1 + with: + go-version: 1.14 - - 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 + # 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;21.4.7075529" | grep -v = || true - - name: Set environment variables - shell: bash - run: | - echo 'GOPATH=${{ runner.workspace }}' >> $GITHUB_ENV - echo '${{ runner.workspace }}/bin' >> $GITHUB_PATH + - 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: 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/* \ - -dest build \ - . + - name: arm-v7a Set environment variables + shell: bash + run: | + echo "CC=$(echo $ANDROID_HOME/ndk/21.4.7075529/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 -o build/rclone-android-16-armv7a . - - name: Build rclone - shell: bash - run: | - make + - name: arm64-v8a Set environment variables + shell: bash + run: | + echo "CC=$(echo $ANDROID_HOME/ndk/21.4.7075529/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: 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' + - name: arm64-v8a build + run: go build -v -tags android -trimpath -o build/rclone-android-21-armv8a . + + - name: x86 Set environment variables + shell: bash + run: | + echo "CC=$(echo $ANDROID_HOME/ndk/21.4.7075529/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 -o build/rclone-android-16-x86 . + + - name: x64 Set environment variables + shell: bash + run: | + echo "CC=$(echo $ANDROID_HOME/ndk/21.4.7075529/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 -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'