This diff forwardports 856e436e20d511a4f0d618546da7921fa9f8c5f6 to the master branch Original commit message: - - - This pull request changes `mk` and github workflows to build and publish binaries on tag. We also update the documentation to explain this new branching model. Basically, we have release branches where we produce binary packages and we add extra code, on tag, to publish such packages inside a release. We discussed removing most secrets from builds in this repository and having a different tool/repository that takes in input also secrets for doing follow-up actions after publishing. As a consequence, this pull request also removes all pieces of code that require secrets. The next step is to reinstate this code in this new repository/tool. The existing code in `mk` also implemented caching. This feature was useful when doing local builds because it reduced the time required to obtain binary releases. With builds running as part of GitHub actions, we don't need caching because we spawn parallel machines to build binaries. Therefore, let us also remove caching, which makes the code simpler. (Caching in itself is hard and in https://github.com/ooni/probe/issues/1875 I noted that, for example, caching of the `ooni/go` repository was leading to some unwanted behaviour when changing the branch. Without caching, this behaviour is gone and we always generally use fresh information to produce builds.) Of course, this means that local builds are now slower, but I do not think this is a problem _because_ we want to use GitHub actions for building in the common case. Reference issues: https://github.com/ooni/probe/issues/1879 and https://github.com/ooni/probe/issues/1875. The final aspect to mention to conclude this description is an implementation one: ``` gh release create -p $tag --target $GITHUB_SHA || true ``` The code above uses `|| true` because there could already be a release. So, basically, it means that, if a release does not already exist, then we're going to create one. Otherwise, it does not matter because there's already a release.
This commit is contained in:
@@ -46,12 +46,6 @@ ANDROID_INSTALL_EXTRA = 'build-tools;29.0.3' 'platforms;android-31'
|
||||
#help: * ANDROID_NDK_VERSION : Android NDK version.
|
||||
ANDROID_NDK_VERSION = 23.1.7779620
|
||||
|
||||
#help:
|
||||
#help: * DEBIAN_TILDE_VERSION : if non-empty, this should be "[0-9]+" and
|
||||
#help: will be appended to the package version using
|
||||
#help: a tilde, thus producing, e.g., "1.0~1234".
|
||||
DEBIAN_TILDE_VERSION =
|
||||
|
||||
#help:
|
||||
#help: * GIT_CLONE_DIR : directory where to clone repositories, by default
|
||||
#help: set to `$HOME/.ooniprobe-build/src`.
|
||||
@@ -61,17 +55,6 @@ GIT_CLONE_DIR = $(HOME)/.ooniprobe-build/src
|
||||
$(GIT_CLONE_DIR):
|
||||
mkdir -p $(GIT_CLONE_DIR)
|
||||
|
||||
#help:
|
||||
#help: * GOLANG_DOCKER_GOCACHE : where to store golang's build cache to
|
||||
#help: speed up subsequent Docker builds.
|
||||
GOLANG_DOCKER_GOCACHE = $(HOME)/.ooniprobe-build/docker/gocache
|
||||
|
||||
#help:
|
||||
#help: * GOLANG_DOCKER_GOPATH : GOPATH directory used by builds running
|
||||
#help: inside docker to significantly speed
|
||||
#help: up subsequent Docker based builds.
|
||||
GOLANG_DOCKER_GOPATH := $(HOME)/.ooniprobe-build/docker/gopath
|
||||
|
||||
#help:
|
||||
#help: * GOLANG_EXTRA_FLAGS : extra flags passed to `go build ...`, empty by
|
||||
#help: default. Useful to pass flags to `go`, e.g.:
|
||||
@@ -83,13 +66,6 @@ GOLANG_EXTRA_FLAGS =
|
||||
#help: * GOLANG_VERSION_NUMBER : the expected version number for golang.
|
||||
GOLANG_VERSION_NUMBER = 1.17.3
|
||||
|
||||
#help:
|
||||
#help: * GPG_USER : allows overriding the default GPG user used
|
||||
#help: to sign binary releases, e.g.:
|
||||
#help:
|
||||
#help: ./mk GPG_USER=john@doe.com ooniprobe/windows
|
||||
GPG_USER = simone@openobservatory.org
|
||||
|
||||
#help:
|
||||
#help: * MINGW_W64_VERSION : the expected mingw-w64 version.
|
||||
MINGW_W64_VERSION = 10.3.1
|
||||
@@ -130,13 +106,9 @@ show-config:
|
||||
@echo "ANDROID_CLI_SHA256=$(ANDROID_CLI_SHA256)"
|
||||
@echo "ANDROID_INSTALL_EXTRA=$(ANDROID_INSTALL_EXTRA)"
|
||||
@echo "ANDROID_NDK_VERSION=$(ANDROID_NDK_VERSION)"
|
||||
@echo "DEBIAN_TILDE_VERSION=$(DEBIAN_TILDE_VERSION)"
|
||||
@echo "GIT_CLONE_DIR=$(GIT_CLONE_DIR)"
|
||||
@echo "GOLANG_DOCKER_GOCACHE=$(GOLANG_DOCKER_GOCACHE)"
|
||||
@echo "GOLANG_DOCKER_GOPATH=$(GOLANG_DOCKER_GOPATH)"
|
||||
@echo "GOLANG_EXTRA_FLAGS=$(GOLANG_EXTRA_FLAGS)"
|
||||
@echo "GOLANG_VERSION_NUMBER=$(GOLANG_VERSION_NUMBER)"
|
||||
@echo "GPG_USER=$(GPG_USER)"
|
||||
@echo "MINGW_W64_VERSION=$(MINGW_W64_VERSION)"
|
||||
@echo "OONI_PSIPHON_TAGS=$(OONI_PSIPHON_TAGS)"
|
||||
@echo "OONI_ANDROID_HOME=$(OONI_ANDROID_HOME)"
|
||||
@@ -160,7 +132,7 @@ GOLANG_DOCKER_IMAGE = golang:$(GOLANG_VERSION_NUMBER)-alpine
|
||||
#help:
|
||||
#help: You can also build the following subtargets:
|
||||
.PHONY: ./CLI/miniooni
|
||||
./CLI/miniooni: \
|
||||
./CLI/miniooni: \
|
||||
./CLI/miniooni-darwin-amd64 \
|
||||
./CLI/miniooni-darwin-arm64 \
|
||||
./CLI/miniooni-linux-386 \
|
||||
@@ -226,215 +198,91 @@ GOLANG_DOCKER_IMAGE = golang:$(GOLANG_VERSION_NUMBER)-alpine
|
||||
GOOS=windows GOARCH=amd64 CGO_ENABLED=0 go build -tags="$(OONI_PSIPHON_TAGS)" -ldflags="-s -w" $(GOLANG_EXTRA_FLAGS) -o $@ ./internal/cmd/miniooni
|
||||
|
||||
#help:
|
||||
#help: The `./mk ./CLI/ooniprobe/darwin` command builds the ooniprobe official
|
||||
#help: The `./mk ./CLI/ooniprobe-darwin` command builds the ooniprobe official
|
||||
#help: command line client for darwin/amd64 and darwin/arm64. This process
|
||||
#help: entails building ooniprobe and then GPG-signing the binaries.
|
||||
#help:
|
||||
#help: You can also build the following subtargets:
|
||||
.PHONY: ./CLI/ooniprobe/darwin
|
||||
./CLI/ooniprobe/darwin: \
|
||||
./ooniprobe_darwin_amd64.tar.gz.asc \
|
||||
./ooniprobe_darwin_arm64.tar.gz.asc
|
||||
|
||||
# ./ooniprobe_darwin_amd64.tar.gz.asc creates and signs the release tarball
|
||||
.PHONY: ./ooniprobe_darwin_amd64.tar.gz.asc
|
||||
./ooniprobe_darwin_amd64.tar.gz.asc: ./CLI/darwin/amd64/ooniprobe
|
||||
rm -f ooniprobe_darwin_amd64.tar.gz ooniprobe_darwin_amd64.tar.gz.asc
|
||||
tar -cvzf ooniprobe_darwin_amd64.tar.gz -C ./CLI/darwin/amd64 ooniprobe
|
||||
gpg -abu $(GPG_USER) ooniprobe_darwin_amd64.tar.gz
|
||||
.PHONY: ./CLI/ooniprobe-darwin
|
||||
./CLI/ooniprobe-darwin: ./CLI/ooniprobe-darwin-amd64 ./CLI/ooniprobe-darwin-arm64
|
||||
|
||||
# We force CGO_ENABLED=1 because in principle we may be cross compiling. In
|
||||
# reality it's hard to see a macOS/darwin build not made on macOS.
|
||||
#help:
|
||||
#help: * `./mk ./CLI/darwin/amd64/ooniprobe`: darwin/amd64
|
||||
.PHONY: ./CLI/darwin/amd64/ooniprobe
|
||||
./CLI/darwin/amd64/ooniprobe: search/for/go maybe/copypsiphon
|
||||
#help: * `./mk ./CLI/ooniprobe-darwin-amd64`: darwin/amd64
|
||||
.PHONY: ./CLI/ooniprobe-darwin-amd64
|
||||
./CLI/ooniprobe-darwin-amd64: search/for/go maybe/copypsiphon
|
||||
GOOS=darwin GOARCH=amd64 CGO_ENABLED=1 go build -tags="$(OONI_PSIPHON_TAGS)" -ldflags="-s -w" $(GOLANG_EXTRA_FLAGS) -o $@ ./cmd/ooniprobe
|
||||
|
||||
# ./ooniprobe_darwin_arm64.tar.gz.asc creates and signs the release tarball
|
||||
.PHONY: ./ooniprobe_darwin_arm64.tar.gz.asc
|
||||
./ooniprobe_darwin_arm64.tar.gz.asc: ./CLI/darwin/arm64/ooniprobe
|
||||
rm -f ooniprobe_darwin_arm64.tar.gz ooniprobe_darwin_arm64.tar.gz.asc
|
||||
tar -cvzf ooniprobe_darwin_arm64.tar.gz -C ./CLI/darwin/arm64 ooniprobe
|
||||
gpg -abu $(GPG_USER) ooniprobe_darwin_arm64.tar.gz
|
||||
|
||||
#help:
|
||||
#help: * `./mk ./CLI/darwin/arm64/ooniprobe`: darwin/arm64
|
||||
.PHONY: ./CLI/darwin/arm64/ooniprobe
|
||||
./CLI/darwin/arm64/ooniprobe: search/for/go maybe/copypsiphon
|
||||
#help: * `./mk ./CLI/ooniprobe-darwin-arm64`: darwin/arm64
|
||||
.PHONY: ./CLI/ooniprobe-darwin-arm64
|
||||
./CLI/ooniprobe-darwin-arm64: search/for/go maybe/copypsiphon
|
||||
GOOS=darwin GOARCH=arm64 CGO_ENABLED=1 go build -tags="$(OONI_PSIPHON_TAGS)" -ldflags="-s -w" $(GOLANG_EXTRA_FLAGS) -o $@ ./cmd/ooniprobe
|
||||
|
||||
#help:
|
||||
#help: The `./mk ./debian` command builds the ooniprobe CLI
|
||||
#help: debian package for amd64 and arm64.
|
||||
#help: The `./mk ./CLI/ooniprobe-linux` command builds the ooniprobe official command
|
||||
#help: line client for amd64, arm64, etc.
|
||||
#help:
|
||||
#help: You can also build the following subtargets:
|
||||
.PHONY: ./debian
|
||||
./debian: \
|
||||
./debian/386 \
|
||||
./debian/amd64 \
|
||||
./debian/arm \
|
||||
./debian/arm64
|
||||
|
||||
#help:
|
||||
#help: * `./mk ./debian/386`: debian/386
|
||||
.PHONY: ./debian/386
|
||||
# This extra .PHONY for linux/386 is to help printing targets 🤷.
|
||||
.PHONY: ./CLI/linux/386/ooniprobe
|
||||
./debian/386: search/for/docker ./CLI/linux/386/ooniprobe
|
||||
docker pull debian:stable
|
||||
docker run -v $(shell pwd):/ooni -w /ooni debian:stable ./CLI/linux/pkgdebian 386 "$(DEBIAN_TILDE_VERSION)"
|
||||
|
||||
#help:
|
||||
#help: * `./mk ./debian/amd64`: debian/amd64
|
||||
.PHONY: ./debian/amd64
|
||||
# This extra .PHONY for linux/amd64 is to help printing targets 🤷.
|
||||
.PHONY: ./CLI/linux/amd64/ooniprobe
|
||||
./debian/amd64: search/for/docker ./CLI/linux/amd64/ooniprobe
|
||||
docker pull debian:stable
|
||||
docker run -v $(shell pwd):/ooni -w /ooni debian:stable ./CLI/linux/pkgdebian amd64 "$(DEBIAN_TILDE_VERSION)"
|
||||
|
||||
# Note that we're building for armv7 here
|
||||
#help:
|
||||
#help: * `./mk ./debian/arm`: debian/arm
|
||||
.PHONY: ./debian/arm
|
||||
# This extra .PHONY for linux/arm is to help printing targets 🤷.
|
||||
.PHONY: ./CLI/linux/arm/ooniprobe
|
||||
./debian/arm: search/for/docker ./CLI/linux/arm/ooniprobe
|
||||
docker pull debian:stable
|
||||
docker run -v $(shell pwd):/ooni -w /ooni debian:stable ./CLI/linux/pkgdebian arm "$(DEBIAN_TILDE_VERSION)"
|
||||
|
||||
#help:
|
||||
#help: * `./mk ./debian/arm64`: debian/arm64
|
||||
.PHONY: ./debian/arm64
|
||||
# This extra .PHONY for linux/arm64 is to help printing targets 🤷.
|
||||
.PHONY: ./CLI/linux/arm64/ooniprobe
|
||||
./debian/arm64: search/for/docker ./CLI/linux/arm64/ooniprobe
|
||||
docker pull debian:stable
|
||||
docker run -v $(shell pwd):/ooni -w /ooni debian:stable ./CLI/linux/pkgdebian arm64 "$(DEBIAN_TILDE_VERSION)"
|
||||
|
||||
#help:
|
||||
#help: The `./mk ./CLI/ooniprobe/linux` command builds the ooniprobe official command
|
||||
#help: line client for amd64 and arm64. This entails building and GPG signing.
|
||||
#help:
|
||||
#help: You can also build the following subtargets:
|
||||
.PHONY: ./CLI/ooniprobe/linux
|
||||
./CLI/ooniprobe/linux: \
|
||||
./ooniprobe_linux_386.tar.gz.asc \
|
||||
./ooniprobe_linux_amd64.tar.gz.asc \
|
||||
./ooniprobe_linux_armv7.tar.gz.asc \
|
||||
./ooniprobe_linux_arm64.tar.gz.asc
|
||||
|
||||
# ./ooniprobe_linux_386.tar.gz.asc creates and signs the release tarball
|
||||
.PHONY: ./ooniprobe_linux_386.tar.gz.asc
|
||||
./ooniprobe_linux_386.tar.gz.asc: ./CLI/linux/386/ooniprobe
|
||||
rm -f ooniprobe_linux_386.tar.gz ooniprobe_linux_386.tar.gz.asc
|
||||
tar -cvzf ooniprobe_linux_386.tar.gz -C ./CLI/linux/386 ooniprobe
|
||||
gpg -abu $(GPG_USER) ooniprobe_linux_386.tar.gz
|
||||
.PHONY: ./CLI/ooniprobe-linux
|
||||
./CLI/ooniprobe-linux: \
|
||||
./CLI/ooniprobe-linux-386 \
|
||||
./CLI/ooniprobe-linux-amd64 \
|
||||
./CLI/ooniprobe-linux-armv7 \
|
||||
./CLI/ooniprobe-linux-arm64
|
||||
|
||||
# Linux builds use Alpine and Docker so we are sure that we are statically
|
||||
# linking to musl libc, thus making our binaries extremely portable.
|
||||
#help:
|
||||
#help: * `./mk ./CLI/linux/386/ooniprobe`: linux/386
|
||||
.PHONY: ./CLI/linux/386/ooniprobe
|
||||
./CLI/linux/386/ooniprobe: search/for/docker maybe/copypsiphon
|
||||
#help: * `./mk ./CLI/ooniprobe-linux-386`: linux/386
|
||||
.PHONY: ./CLI/ooniprobe-linux-386
|
||||
./CLI/ooniprobe-linux-386: search/for/docker maybe/copypsiphon
|
||||
docker pull --platform linux/386 $(GOLANG_DOCKER_IMAGE)
|
||||
docker run --platform linux/386 -e GOPATH=/gopath -e GOARCH=386 -v $(GOLANG_DOCKER_GOCACHE)/386:/root/.cache/go-build -v $(GOLANG_DOCKER_GOPATH):/gopath -v $(shell pwd):/ooni -w /ooni $(GOLANG_DOCKER_IMAGE) ./CLI/linux/build -tags=netgo,$(OONI_PSIPHON_TAGS) $(GOLANG_EXTRA_FLAGS)
|
||||
|
||||
# ./ooniprobe_linux_amd64.tar.gz.asc creates and signs the release tarball
|
||||
.PHONY: ./ooniprobe_linux_amd64.tar.gz.asc
|
||||
./ooniprobe_linux_amd64.tar.gz.asc: ./CLI/linux/amd64/ooniprobe
|
||||
rm -f ooniprobe_linux_amd64.tar.gz ooniprobe_linux_amd64.tar.gz.asc
|
||||
tar -cvzf ooniprobe_linux_amd64.tar.gz -C ./CLI/linux/amd64 ooniprobe
|
||||
gpg -abu $(GPG_USER) ooniprobe_linux_amd64.tar.gz
|
||||
docker run --platform linux/386 -e GOPATH=/gopath -e GOARCH=386 -v $(shell pwd):/ooni -w /ooni $(GOLANG_DOCKER_IMAGE) ./CLI/build-linux -tags=netgo,$(OONI_PSIPHON_TAGS) $(GOLANG_EXTRA_FLAGS)
|
||||
|
||||
#help:
|
||||
#help: * `./mk ./CLI/linux/amd64/ooniprobe`: linux/amd64
|
||||
.PHONY: ./CLI/linux/amd64/ooniprobe
|
||||
./CLI/linux/amd64/ooniprobe: search/for/docker maybe/copypsiphon
|
||||
#help: * `./mk ./CLI/ooniprobe-linux-amd64`: linux/amd64
|
||||
.PHONY: ./CLI/ooniprobe-linux-amd64
|
||||
./CLI/ooniprobe-linux-amd64: search/for/docker maybe/copypsiphon
|
||||
docker pull --platform linux/amd64 $(GOLANG_DOCKER_IMAGE)
|
||||
docker run --platform linux/amd64 -e GOPATH=/gopath -e GOARCH=amd64 -v $(GOLANG_DOCKER_GOCACHE)/amd64:/root/.cache/go-build -v $(GOLANG_DOCKER_GOPATH):/gopath -v $(shell pwd):/ooni -w /ooni $(GOLANG_DOCKER_IMAGE) ./CLI/linux/build -tags=netgo,$(OONI_PSIPHON_TAGS) $(GOLANG_EXTRA_FLAGS)
|
||||
docker run --platform linux/amd64 -e GOPATH=/gopath -e GOARCH=amd64 -v $(shell pwd):/ooni -w /ooni $(GOLANG_DOCKER_IMAGE) ./CLI/build-linux -tags=netgo,$(OONI_PSIPHON_TAGS) $(GOLANG_EXTRA_FLAGS)
|
||||
|
||||
# ./ooniprobe_linux_armv7.tar.gz.asc creates and signs the release tarball
|
||||
.PHONY: ./ooniprobe_linux_armv7.tar.gz.asc
|
||||
./ooniprobe_linux_armv7.tar.gz.asc: ./CLI/linux/arm/ooniprobe
|
||||
rm -f ooniprobe_linux_armv7.tar.gz ooniprobe_linux_armv7.tar.gz.asc
|
||||
tar -cvzf ooniprobe_linux_armv7.tar.gz -C ./CLI/linux/arm ooniprobe
|
||||
gpg -abu $(GPG_USER) ooniprobe_linux_armv7.tar.gz
|
||||
|
||||
# Note that we're building for armv7 here
|
||||
#help:
|
||||
#help: * `./mk ./CLI/linux/arm/ooniprobe`: linux/arm
|
||||
.PHONY: ./CLI/linux/arm/ooniprobe
|
||||
./CLI/linux/arm/ooniprobe: search/for/docker maybe/copypsiphon
|
||||
#help: * `./mk ./CLI/ooniprobe-linux-armv7`: linux/arm
|
||||
.PHONY: ./CLI/ooniprobe-linux-armv7
|
||||
./CLI/ooniprobe-linux-armv7: search/for/docker maybe/copypsiphon
|
||||
docker pull --platform linux/arm/v7 $(GOLANG_DOCKER_IMAGE)
|
||||
docker run --platform linux/arm/v7 -e GOPATH=/gopath -e GOARCH=arm -e GOARM=7 -v $(GOLANG_DOCKER_GOCACHE)/arm:/root/.cache/go-build -v $(GOLANG_DOCKER_GOPATH):/gopath -v $(shell pwd):/ooni -w /ooni $(GOLANG_DOCKER_IMAGE) ./CLI/linux/build -tags=netgo,$(OONI_PSIPHON_TAGS) $(GOLANG_EXTRA_FLAGS)
|
||||
|
||||
# ./ooniprobe_linux_arm64.tar.gz.asc creates and signs the release tarball
|
||||
.PHONY: ./ooniprobe_linux_arm64.tar.gz.asc
|
||||
./ooniprobe_linux_arm64.tar.gz.asc: ./CLI/linux/arm64/ooniprobe
|
||||
rm -f ooniprobe_linux_arm64.tar.gz ooniprobe_linux_arm64.tar.gz.asc
|
||||
tar -cvzf ooniprobe_linux_arm64.tar.gz -C ./CLI/linux/arm64 ooniprobe
|
||||
gpg -abu $(GPG_USER) ooniprobe_linux_arm64.tar.gz
|
||||
docker run --platform linux/arm/v7 -e GOPATH=/gopath -e GOARCH=arm -e GOARM=7 -v $(shell pwd):/ooni -w /ooni $(GOLANG_DOCKER_IMAGE) ./CLI/build-linux -tags=netgo,$(OONI_PSIPHON_TAGS) $(GOLANG_EXTRA_FLAGS)
|
||||
|
||||
#help:
|
||||
#help: * `./mk ./CLI/linux/arm64/ooniprobe`: linux/arm64
|
||||
.PHONY: ./CLI/linux/arm64/ooniprobe
|
||||
./CLI/linux/arm64/ooniprobe: search/for/docker maybe/copypsiphon
|
||||
#help: * `./mk ./CLI/ooniprobe-linux-arm64`: linux/arm64
|
||||
.PHONY: ./CLI/ooniprobe-linux-arm64
|
||||
./CLI/ooniprobe-linux-arm64: search/for/docker maybe/copypsiphon
|
||||
docker pull --platform linux/arm64 $(GOLANG_DOCKER_IMAGE)
|
||||
docker run --platform linux/arm64 -e GOPATH=/gopath -e GOARCH=arm64 -v $(GOLANG_DOCKER_GOCACHE)/arm64:/root/.cache/go-build -v $(GOLANG_DOCKER_GOPATH):/gopath -v $(shell pwd):/ooni -w /ooni $(GOLANG_DOCKER_IMAGE) ./CLI/linux/build -tags=netgo,$(OONI_PSIPHON_TAGS) $(GOLANG_EXTRA_FLAGS)
|
||||
docker run --platform linux/arm64 -e GOPATH=/gopath -e GOARCH=arm64 -v $(shell pwd):/ooni -w /ooni $(GOLANG_DOCKER_IMAGE) ./CLI/build-linux -tags=netgo,$(OONI_PSIPHON_TAGS) $(GOLANG_EXTRA_FLAGS)
|
||||
|
||||
#help:
|
||||
#help: The `./mk ./CLI/ooniprobe/windows` command builds the ooniprobe official
|
||||
#help: The `./mk ./CLI/ooniprobe-windows` command builds the ooniprobe official
|
||||
#help: command line client for windows/386 and windows/amd64. This entails
|
||||
#help: building and PGP signing the executables.
|
||||
#help:
|
||||
#help: You can also build the following subtargets:
|
||||
.PHONY: ./CLI/ooniprobe/windows
|
||||
./CLI/ooniprobe/windows: \
|
||||
./ooniprobe_windows_386.tar.gz.asc \
|
||||
./ooniprobe_windows_386.zip.asc \
|
||||
./ooniprobe_windows_amd64.tar.gz.asc \
|
||||
./ooniprobe_windows_amd64.zip.asc
|
||||
|
||||
# ./ooniprobe_windows_386.tar.gz.asc creates and signs the release tarball
|
||||
.PHONY: ./ooniprobe_windows_386.tar.gz.asc
|
||||
./ooniprobe_windows_386.tar.gz.asc: ./CLI/windows/386/ooniprobe.exe
|
||||
rm -f ooniprobe_windows_386.tar.gz ooniprobe_windows_386.tar.gz.asc
|
||||
tar -cvzf ooniprobe_windows_386.tar.gz -C ./CLI/windows/386 ooniprobe.exe
|
||||
gpg -abu $(GPG_USER) ooniprobe_windows_386.tar.gz
|
||||
|
||||
# ./ooniprobe_windows_386.zip.asc creates and signs the release zipball
|
||||
.PHONY: ./ooniprobe_windows_386.zip.asc
|
||||
./ooniprobe_windows_386.zip.asc: ./CLI/windows/386/ooniprobe.exe
|
||||
rm -f ooniprobe_windows_386.zip ooniprobe_windows_386.zip.asc
|
||||
cd ./CLI/windows/386 && zip ../../../ooniprobe_windows_386.zip ooniprobe.exe
|
||||
gpg -abu $(GPG_USER) ooniprobe_windows_386.zip
|
||||
.PHONY: ./CLI/ooniprobe-windows
|
||||
./CLI/ooniprobe-windows: \
|
||||
./CLI/ooniprobe-windows-386.exe \
|
||||
./CLI/ooniprobe-windows-amd64.exe
|
||||
|
||||
#help:
|
||||
#help: * `./mk ./CLI/windows/386/ooniprobe.exe`: windows/386
|
||||
.PHONY: ./CLI/windows/386/ooniprobe.exe
|
||||
./CLI/windows/386/ooniprobe.exe: search/for/go search/for/mingw-w64 maybe/copypsiphon
|
||||
#help: * `./mk ./CLI/ooniprobe-windows-386.exe`: windows/386
|
||||
.PHONY: ./CLI/ooniprobe-windows-386.exe
|
||||
./CLI/ooniprobe-windows-386.exe: search/for/go search/for/mingw-w64 maybe/copypsiphon
|
||||
GOOS=windows GOARCH=386 CGO_ENABLED=1 CC=i686-w64-mingw32-gcc go build -tags="$(OONI_PSIPHON_TAGS)" -ldflags="-s -w" $(GOLANG_EXTRA_FLAGS) -o $@ ./cmd/ooniprobe
|
||||
|
||||
# ./ooniprobe_windows_amd64.tar.gz.asc creates and signs the release tarball
|
||||
.PHONY: ./ooniprobe_windows_amd64.tar.gz.asc
|
||||
./ooniprobe_windows_amd64.tar.gz.asc: ./CLI/windows/amd64/ooniprobe.exe
|
||||
rm -f ooniprobe_windows_amd64.tar.gz ooniprobe_windows_amd64.tar.gz.asc
|
||||
tar -cvzf ooniprobe_windows_amd64.tar.gz -C ./CLI/windows/amd64 ooniprobe.exe
|
||||
gpg -abu $(GPG_USER) ooniprobe_windows_amd64.tar.gz
|
||||
|
||||
# ./ooniprobe_windows_amd64.zip.asc creates and signs the release zipball
|
||||
.PHONY: ./ooniprobe_windows_amd64.zip.asc
|
||||
./ooniprobe_windows_amd64.zip.asc: ./CLI/windows/amd64/ooniprobe.exe
|
||||
rm -f ooniprobe_windows_amd64.zip ooniprobe_windows_amd64.zip.asc
|
||||
cd ./CLI/windows/amd64 && zip ../../../ooniprobe_windows_amd64.zip ooniprobe.exe
|
||||
gpg -abu $(GPG_USER) ooniprobe_windows_amd64.zip
|
||||
|
||||
#help:
|
||||
#help: * `./mk ./CLI/windows/amd64/ooniprobe.exe`: windows/amd64
|
||||
.PHONY: ./CLI/windows/amd64/ooniprobe.exe
|
||||
./CLI/windows/amd64/ooniprobe.exe: search/for/go search/for/mingw-w64 maybe/copypsiphon
|
||||
#help: * `./mk ./CLI/ooniprobe-windows-amd64.exe`: windows/amd64
|
||||
.PHONY: ./CLI/ooniprobe-windows-amd64.exe
|
||||
./CLI/ooniprobe-windows-amd64.exe: search/for/go search/for/mingw-w64 maybe/copypsiphon
|
||||
GOOS=windows GOARCH=amd64 CGO_ENABLED=1 CC=x86_64-w64-mingw32-gcc go build -tags="$(OONI_PSIPHON_TAGS)" -ldflags="-s -w" $(GOLANG_EXTRA_FLAGS) -o $@ ./cmd/ooniprobe
|
||||
|
||||
#help:
|
||||
@@ -442,14 +290,13 @@ GOLANG_DOCKER_IMAGE = golang:$(GOLANG_VERSION_NUMBER)-alpine
|
||||
#help:
|
||||
#help: You can also build the following subtargets:
|
||||
.PHONY: ./MOBILE/android
|
||||
./MOBILE/android: search/for/gpg search/for/jar ./MOBILE/android/oonimkall.aar
|
||||
cp ./MOBILE/android/oonimkall.aar ./MOBILE/android/oonimkall-$(OONIMKALL_V).aar
|
||||
cp ./MOBILE/android/oonimkall-sources.jar ./MOBILE/android/oonimkall-$(OONIMKALL_V)-sources.jar
|
||||
cat ./MOBILE/template.pom | sed -e "s/@VERSION@/$(OONIMKALL_V)/g" > ./MOBILE/android/oonimkall-$(OONIMKALL_V).pom
|
||||
gpg -abu $(GPG_USER) ./MOBILE/android/oonimkall-$(OONIMKALL_V).aar
|
||||
gpg -abu $(GPG_USER) ./MOBILE/android/oonimkall-$(OONIMKALL_V)-sources.jar
|
||||
gpg -abu $(GPG_USER) ./MOBILE/android/oonimkall-$(OONIMKALL_V).pom
|
||||
cd ./MOBILE/android && jar -cf bundle.jar oonimkall-$(OONIMKALL_V).aar oonimkall-$(OONIMKALL_V).aar.asc oonimkall-$(OONIMKALL_V)-sources.jar oonimkall-$(OONIMKALL_V)-sources.jar.asc oonimkall-$(OONIMKALL_V).pom oonimkall-$(OONIMKALL_V).pom.asc
|
||||
./MOBILE/android: ./MOBILE/android/oonimkall.aar ./MOBILE/android/oonimkall.pom
|
||||
|
||||
#help:
|
||||
#help: * `./mk ./MOBILE/android/oonimkall.pom`: the POM
|
||||
.PHONY: ./MOBILE/android/oonimkall.pom
|
||||
./MOBILE/android/oonimkall.pom:
|
||||
cat ./MOBILE/android/template.pom | sed -e "s/@VERSION@/$(OONIMKALL_V)/g" > ./MOBILE/android/oonimkall.pom
|
||||
|
||||
#help:
|
||||
#help: * `./mk ./MOBILE/android/oonimkall.aar`: the AAR
|
||||
@@ -466,16 +313,14 @@ GOMOBILE = $(shell go env GOPATH)/bin/gomobile
|
||||
__android_build_with_ooni_go: search/for/go
|
||||
go get -u golang.org/x/mobile/cmd/gomobile
|
||||
$(GOMOBILE) init
|
||||
PATH=$(shell go env GOPATH)/bin:$$PATH ANDROID_HOME=$(OONI_ANDROID_HOME) ANDROID_NDK_HOME=$(OONI_ANDROID_HOME)/ndk/$(ANDROID_NDK_VERSION) $(GOMOBILE) bind -target android -o ./MOBILE/android/oonimkall.aar -tags="$(OONI_PSIPHON_TAGS)" -ldflags '-s -w' $(GOLANG_EXTRA_FLAGS) ./pkg/oonimkall
|
||||
PATH=$(shell go env GOPATH)/bin:$$PATH ANDROID_HOME=$(OONI_ANDROID_HOME) ANDROID_NDK_HOME=$(OONI_ANDROID_HOME)/ndk/$(ANDROID_NDK_VERSION) $(GOMOBILE) bind -x -target android -o ./MOBILE/android/oonimkall.aar -tags="$(OONI_PSIPHON_TAGS)" -ldflags '-s -w' $(GOLANG_EXTRA_FLAGS) ./pkg/oonimkall
|
||||
|
||||
#help:
|
||||
#help: The `./mk ./MOBILE/ios` command builds the oonimkall library for iOS.
|
||||
#help:
|
||||
#help: You can also build the following subtargets:
|
||||
.PHONY: ./MOBILE/ios
|
||||
./MOBILE/ios: \
|
||||
./MOBILE/ios/oonimkall.xcframework.zip \
|
||||
./MOBILE/ios/oonimkall.podspec
|
||||
./MOBILE/ios: ./MOBILE/ios/oonimkall.xcframework.zip ./MOBILE/ios/oonimkall.podspec
|
||||
|
||||
#help:
|
||||
#help: * `./mk ./MOBILE/ios/oonimkall.xcframework.zip`: zip the xcframework
|
||||
@@ -495,26 +340,13 @@ __android_build_with_ooni_go: search/for/go
|
||||
#help:
|
||||
#help: * `./mk ./MOBILE/ios/oonimkall.podspec`: the podspec
|
||||
.PHONY: ./MOBILE/ios/oonimkall.podspec
|
||||
./MOBILE/ios/oonimkall.podspec: ./MOBILE/template.podspec
|
||||
./MOBILE/ios/oonimkall.podspec: ./MOBILE/ios/template.podspec
|
||||
cat $< | sed -e "s/@VERSION@/$(OONIMKALL_V)/g" -e "s/@RELEASE@/$(OONIMKALL_R)/g" > $@
|
||||
|
||||
# important: OONIMKALL_V and OONIMKALL_R MUST be expanded just once so we use `:=`
|
||||
OONIMKALL_V := $(shell date -u +%Y.%m.%d-%H%M%S)
|
||||
OONIMKALL_R := $(shell git describe --tags || echo '0.0.0-dev')
|
||||
|
||||
#help: The `debian/publish` target publishes all the debian packages
|
||||
#help: present in the toplevel directory using debopos-ci.
|
||||
# TODO(bassosimone): do not hardcode using linux/amd64 here?
|
||||
.PHONY: debian/publish
|
||||
debian/publish: search/for/docker
|
||||
test -z "$(CI)" || { echo "fatal: refusing to run in a CI environment" 1>&2; exit 1; }
|
||||
ls *.deb 2>/dev/null || { echo "fatal: no debian packages in the toplevel dir" 1>&2; exit 1; }
|
||||
test -n "$(AWS_ACCESS_KEY_ID)" || { echo "fatal: AWS_ACCESS_KEY_ID not set" 1>&2; exit 1; }
|
||||
test -n "$(AWS_SECRET_ACCESS_KEY)" || { echo "fatal: AWS_SECRET_ACCESS_KEY not set" 1>&2; exit 1; }
|
||||
test -n "$(DEB_GPG_KEY)" || { echo "fatal: DEB_GPG_KEY not set" 1>&2; exit 1; }
|
||||
docker pull --platform linux/amd64 ubuntu:20.04
|
||||
docker run --platform linux/amd64 -e AWS_ACCESS_KEY_ID="$(AWS_ACCESS_KEY_ID)" -e AWS_SECRET_ACCESS_KEY="$(AWS_SECRET_ACCESS_KEY)" -e DEB_GPG_KEY="$(DEB_GPG_KEY)" -v $(shell pwd):/ooni -w /ooni ubuntu:20.04 ./CLI/linux/pubdebian
|
||||
|
||||
#help:
|
||||
#help: The following commands check for the availability of dependencies:
|
||||
# TODO(bassosimone): make checks more robust?
|
||||
@@ -547,13 +379,6 @@ search/for/git:
|
||||
@printf "checking for git... "
|
||||
@command -v git || { echo "not found"; exit 1; }
|
||||
|
||||
#help:
|
||||
#help: * `./mk search/for/gpg`: checks for gpg
|
||||
.PHONY: search/for/gpg
|
||||
search/for/gpg:
|
||||
@printf "checking for gpg... "
|
||||
@command -v gpg || { echo "not found"; exit 1; }
|
||||
|
||||
#help:
|
||||
#help: * `./mk search/for/go`: checks for go
|
||||
.PHONY: search/for/go
|
||||
@@ -568,13 +393,6 @@ search/for/go:
|
||||
# SHOULD NOT cache this value so we ARE NOT using `:=`)
|
||||
__GOVERSION_REAL = $(shell go version | awk '{print $$3}')
|
||||
|
||||
#help:
|
||||
#help: * `./mk search/for/jar`: checks for jar
|
||||
.PHONY: search/for/jar
|
||||
search/for/jar:
|
||||
@printf "checking for jar... "
|
||||
@command -v jar || { echo "not found"; exit 1; }
|
||||
|
||||
#help:
|
||||
#help: * `./mk search/for/java`: checks for java
|
||||
.PHONY: search/for/java
|
||||
@@ -671,17 +489,15 @@ OONIPRIVATE_REPO = git@github.com:ooni/probe-private
|
||||
|
||||
# $(OONIPRIVATE) clones the private repository in $(GIT_CLONE_DIR)
|
||||
$(OONIPRIVATE): search/for/git $(GIT_CLONE_DIR)
|
||||
test -d $(OONIPRIVATE) || $(MAKE) -f mk __really_clone_private_repo
|
||||
|
||||
__really_clone_private_repo:
|
||||
rm -rf $(OONIPRIVATE)
|
||||
git clone $(OONIPRIVATE_REPO) $(OONIPRIVATE)
|
||||
|
||||
#help:
|
||||
#help: The `./mk ooni/go` command builds the latest version of ooni/go.
|
||||
.PHONY: ooni/go
|
||||
ooni/go: search/for/bash search/for/git search/for/go $(OONIGODIR)
|
||||
test -d $(OONIGODIR) || git clone -b $(OONIGO_BRANCH) --single-branch --depth 8 $(OONIGO_REPO) $(OONIGODIR)
|
||||
cd $(OONIGODIR) && git pull --ff-only
|
||||
rm -rf $(OONIGODIR)
|
||||
git clone -b $(OONIGO_BRANCH) --single-branch --depth 8 $(OONIGO_REPO) $(OONIGODIR)
|
||||
cd $(OONIGODIR)/src && ./make.bash
|
||||
|
||||
# OONIGODIR is the directory in which we clone ooni/go
|
||||
@@ -695,7 +511,8 @@ OONIGO_REPO = https://github.com/ooni/go
|
||||
#help: correct version of the Android sdk.
|
||||
.PHONY: android/sdk
|
||||
android/sdk: search/for/java
|
||||
test -d $(OONI_ANDROID_HOME) || $(MAKE) -f mk android/sdk/download
|
||||
rm -rf $(OONI_ANDROID_HOME)
|
||||
$(MAKE) -f mk android/sdk/download
|
||||
test -f $(__ANDROID_SDKMANAGER) || { echo "please run './mk android/sdk/download'"; exit 1; }
|
||||
echo "Yes" | $(__ANDROID_SDKMANAGER) --install $(ANDROID_INSTALL_EXTRA) 'ndk;$(ANDROID_NDK_VERSION)'
|
||||
|
||||
|
||||
Reference in New Issue
Block a user