kubernetes / git-sync

A sidecar app which clones a git repo and keeps it in sync with the upstream.
Apache License 2.0
2.21k stars 410 forks source link

Issue with building Git Sync Container #912

Closed rahulmishra closed 3 weeks ago

rahulmishra commented 1 month ago

I am trying to build git-sync on mac os for a linux machine. I am checking out the v4.2.4 tag and it fails with:

make container GOOS=linux GOARCH=amd64 DBG_MAKEFILE=1

find: -printf: unknown primary or operator
echo "making bin/linux_amd64/git-sync"
making bin/linux_amd64/git-sync
docker run                                                 \
        -i                                                     \
        --rm                                                   \
        -u $(id -u):$(id -g)                                 \
        -v $(pwd):/src                                        \
        -w /src                                                \
        -v $(pwd)/.go/bin/linux_amd64:/go/bin               \
        -v $(pwd)/.go/bin/linux_amd64:/go/bin/linux_amd64 \
        -v $(pwd)/.go/cache:/.cache                           \
        --env HTTP_PROXY=                         \
        --env HTTPS_PROXY=                       \
        golang:1.22                                         \
        /bin/sh -c "                                           \
            ARCH=amd64                                       \
            OS=linux                                           \
            VERSION=v4.2.4                                 \
            BUILD_DEBUG=                                 \
            ./build/build.sh                                   \
        "
error obtaining VCS status: exit status 128
    Use -buildvcs=false to disable VCS stamping.
error obtaining VCS status: exit status 128
    Use -buildvcs=false to disable VCS stamping.
make: *** [.go/bin/linux_amd64/git-sync.stamp] Error 1

I can build the v4.2.3 tag just fine.

Any help on this is appreciated.

Go Version: go version go1.22.5 darwin/arm64

thockin commented 1 month ago

The -printf argument to find was first used over a year ago - does that appear when you build 4.2.3? It seems like a red herring.

Both 4.2.3 and 4.2.4 build with Go 1.22, but 4.2.3 used golang:1.22-alpine while 4.2.4 uses golang:1.22 - that should not matter.

We did bump the Go compatibility from 1.20 to 1.22 in go.mod.

You might try adding a set -x near the top of build/build.sh ?

rahulmishra commented 1 month ago

Yes, the printf argument does appear when i build 4.2.3 and it does complete the build successfully despite that warning. i did try debugging the script

make container GOOS=linux GOARCH=amd64 DBG_MAKEFILE=1
find: -printf: unknown primary or operator
echo "making bin/linux_amd64/git-sync"
making bin/linux_amd64/git-sync
docker run                                                 \
        -i                                                     \
        --rm                                                   \
        -u $(id -u):$(id -g)                                 \
        -v $(pwd):/src                                        \
        -w /src                                                \
        -v $(pwd)/.go/bin/linux_amd64:/go/bin               \
        -v $(pwd)/.go/bin/linux_amd64:/go/bin/linux_amd64 \
        -v $(pwd)/.go/cache:/.cache                           \
        --env HTTP_PROXY=                         \
        --env HTTPS_PROXY=                       \
        golang:1.22                                         \
        /bin/sh -c "                                           \
            ARCH=amd64                                       \
            OS=linux                                           \
            VERSION=v4.2.4-dirty                                 \
            BUILD_DEBUG=                                 \
            ./build/build.sh                                   \
        "
+ set -o errexit
+ set -o nounset
+ set -o pipefail
+ '[' -z amd64 ']'
+ '[' -z linux ']'
+ '[' -z v4.2.4-dirty ']'
+ export CGO_ENABLED=0
+ CGO_ENABLED=0
+ export GOARCH=amd64
+ GOARCH=amd64
+ export GOOS=linux
+ GOOS=linux
+ [[ 0 == 1 ]]
++ pwd
+ goasmflags=all=-trimpath=/src
++ pwd
+ gogcflags=all=-trimpath=/src
+ goldflags='-s -w'
++ go list -m
+ always_ldflags='-X k8s.io/git-sync/pkg/version.VERSION=v4.2.4-dirty'
+ go install -installsuffix static -gcflags=all=-trimpath=/src -asmflags=all=-trimpath=/src '-ldflags=-X k8s.io/git-sync/pkg/version.VERSION=v4.2.4-dirty -s -w' ./...
error obtaining VCS status: exit status 128
    Use -buildvcs=false to disable VCS stamping.
error obtaining VCS status: exit status 128
    Use -buildvcs=false to disable VCS stamping.
make: *** [.go/bin/linux_amd64/git-sync.stamp] Error 1
thockin commented 1 month ago

Could be this? https://github.com/golang/go/issues/53532

It might just be that it uses a newer git.

Can you run id and ls -ld . .git on your shell (in the git repo) and maybe add the same into the build.sh?