buildkit/hack/update-generated-files

41 lines
1.2 KiB
Plaintext
Raw Normal View History

Validation and (controlled) generation for go generate'd files. Modelled after the vendor support provide a validator and an updator for files produced by `go generate` (which today just means `*.pb.go`). Main difference from the vendor support is that we are no longer simply nuking and replacing a single directory, so I ended up hardcoding `*.pb.go` in a bunch of places which I don't like but cannot see a way around which doesn't risk nuking people's other local changes. The generated files are placed in an unpacked form in a `FROM scratch` container for update. Use a subdirectory and `tar --strip-components` (portable to MacOS and Linux according to `tar(1)`) since trying to do a `docker export` of just the root ends up adding `.dockerenv`, `sys`, `proc` and `dev` to the source tree. The validate container is not `FROM scratch` because we want `cat`. The run in `frontend/gateway/pb/generate.go` was missing an include so fix that. The versions of `protoc` and the gogo plugins were chosen to regenerate the existing code as closely as possible. The updates to `*.pg.go` here are all the result of regenerating with go1.9 which fixed https://github.com/golang/go/issues/17663 and replaced an invalid timestamp in the gzip header of the data encoded in `fileDescriptor*`, and adopted a new standard for marking generated files. Finally, I noticed that my `docker run`s were missing an `--rm` which I inherited from `validate-vendor`, so fix all those. Closes: #322 Signed-off-by: Ian Campbell <ijc@docker.com>
2018-03-26 10:52:36 +00:00
#!/usr/bin/env bash
. $(dirname $0)/util
Validation and (controlled) generation for go generate'd files. Modelled after the vendor support provide a validator and an updator for files produced by `go generate` (which today just means `*.pb.go`). Main difference from the vendor support is that we are no longer simply nuking and replacing a single directory, so I ended up hardcoding `*.pb.go` in a bunch of places which I don't like but cannot see a way around which doesn't risk nuking people's other local changes. The generated files are placed in an unpacked form in a `FROM scratch` container for update. Use a subdirectory and `tar --strip-components` (portable to MacOS and Linux according to `tar(1)`) since trying to do a `docker export` of just the root ends up adding `.dockerenv`, `sys`, `proc` and `dev` to the source tree. The validate container is not `FROM scratch` because we want `cat`. The run in `frontend/gateway/pb/generate.go` was missing an include so fix that. The versions of `protoc` and the gogo plugins were chosen to regenerate the existing code as closely as possible. The updates to `*.pg.go` here are all the result of regenerating with go1.9 which fixed https://github.com/golang/go/issues/17663 and replaced an invalid timestamp in the gzip header of the data encoded in `fileDescriptor*`, and adopted a new standard for marking generated files. Finally, I noticed that my `docker run`s were missing an `--rm` which I inherited from `validate-vendor`, so fix all those. Closes: #322 Signed-off-by: Ian Campbell <ijc@docker.com>
2018-03-26 10:52:36 +00:00
set -eu -o pipefail -x
: ${CONTINUOUS_INTEGRATION=}
progressFlag=""
if [ "$CONTINUOUS_INTEGRATION" == "true" ]; then progressFlag="--progress=plain"; fi
gogo_version=$(awk '$1 == "github.com/gogo/protobuf" { print $2 }' go.mod)
case $buildmode in
"buildkit")
output=$(mktemp -d -t buildctl-output.XXXXXXXXXX)
buildctl build $progressFlag --frontend=dockerfile.v0 --local context=. --local dockerfile=. \
--opt build-arg:GOGO_VERSION=$gogo_version \
--opt target=update \
--opt filename=./hack/dockerfiles/generated-files.Dockerfile \
--output type=local,dest=$output
cp -R "$output/generated-files/" .
rm -rf $output
;;
"docker-buildkit")
iidfile=$(mktemp -t docker-iidfile.XXXXXXXXXX)
export DOCKER_BUILDKIT=1
docker build --build-arg GOGO_VERSION=$gogo_version --iidfile $iidfile -f ./hack/dockerfiles/generated-files.Dockerfile --target update --force-rm .
iid=$(cat $iidfile)
cid=$(docker create $iid noop)
Validation and (controlled) generation for go generate'd files. Modelled after the vendor support provide a validator and an updator for files produced by `go generate` (which today just means `*.pb.go`). Main difference from the vendor support is that we are no longer simply nuking and replacing a single directory, so I ended up hardcoding `*.pb.go` in a bunch of places which I don't like but cannot see a way around which doesn't risk nuking people's other local changes. The generated files are placed in an unpacked form in a `FROM scratch` container for update. Use a subdirectory and `tar --strip-components` (portable to MacOS and Linux according to `tar(1)`) since trying to do a `docker export` of just the root ends up adding `.dockerenv`, `sys`, `proc` and `dev` to the source tree. The validate container is not `FROM scratch` because we want `cat`. The run in `frontend/gateway/pb/generate.go` was missing an include so fix that. The versions of `protoc` and the gogo plugins were chosen to regenerate the existing code as closely as possible. The updates to `*.pg.go` here are all the result of regenerating with go1.9 which fixed https://github.com/golang/go/issues/17663 and replaced an invalid timestamp in the gzip header of the data encoded in `fileDescriptor*`, and adopted a new standard for marking generated files. Finally, I noticed that my `docker run`s were missing an `--rm` which I inherited from `validate-vendor`, so fix all those. Closes: #322 Signed-off-by: Ian Campbell <ijc@docker.com>
2018-03-26 10:52:36 +00:00
docker export $cid | tar -xf - --strip-components=1 generated-files
Validation and (controlled) generation for go generate'd files. Modelled after the vendor support provide a validator and an updator for files produced by `go generate` (which today just means `*.pb.go`). Main difference from the vendor support is that we are no longer simply nuking and replacing a single directory, so I ended up hardcoding `*.pb.go` in a bunch of places which I don't like but cannot see a way around which doesn't risk nuking people's other local changes. The generated files are placed in an unpacked form in a `FROM scratch` container for update. Use a subdirectory and `tar --strip-components` (portable to MacOS and Linux according to `tar(1)`) since trying to do a `docker export` of just the root ends up adding `.dockerenv`, `sys`, `proc` and `dev` to the source tree. The validate container is not `FROM scratch` because we want `cat`. The run in `frontend/gateway/pb/generate.go` was missing an include so fix that. The versions of `protoc` and the gogo plugins were chosen to regenerate the existing code as closely as possible. The updates to `*.pg.go` here are all the result of regenerating with go1.9 which fixed https://github.com/golang/go/issues/17663 and replaced an invalid timestamp in the gzip header of the data encoded in `fileDescriptor*`, and adopted a new standard for marking generated files. Finally, I noticed that my `docker run`s were missing an `--rm` which I inherited from `validate-vendor`, so fix all those. Closes: #322 Signed-off-by: Ian Campbell <ijc@docker.com>
2018-03-26 10:52:36 +00:00
docker rm $cid
Validation and (controlled) generation for go generate'd files. Modelled after the vendor support provide a validator and an updator for files produced by `go generate` (which today just means `*.pb.go`). Main difference from the vendor support is that we are no longer simply nuking and replacing a single directory, so I ended up hardcoding `*.pb.go` in a bunch of places which I don't like but cannot see a way around which doesn't risk nuking people's other local changes. The generated files are placed in an unpacked form in a `FROM scratch` container for update. Use a subdirectory and `tar --strip-components` (portable to MacOS and Linux according to `tar(1)`) since trying to do a `docker export` of just the root ends up adding `.dockerenv`, `sys`, `proc` and `dev` to the source tree. The validate container is not `FROM scratch` because we want `cat`. The run in `frontend/gateway/pb/generate.go` was missing an include so fix that. The versions of `protoc` and the gogo plugins were chosen to regenerate the existing code as closely as possible. The updates to `*.pg.go` here are all the result of regenerating with go1.9 which fixed https://github.com/golang/go/issues/17663 and replaced an invalid timestamp in the gzip header of the data encoded in `fileDescriptor*`, and adopted a new standard for marking generated files. Finally, I noticed that my `docker run`s were missing an `--rm` which I inherited from `validate-vendor`, so fix all those. Closes: #322 Signed-off-by: Ian Campbell <ijc@docker.com>
2018-03-26 10:52:36 +00:00
rm -f $iidfile
;;
*)
echo "Unsupported build mode: $buildmode" >&2
exit 1
;;
esac