0
0
mirror of https://github.com/signalapp/libsignal.git synced 2024-09-20 03:52:17 +02:00
libsignal/java/Makefile
Jordan Rose d270e06127 Docker: Use -it and --init to handle SIGTERM (^C) properly
-i (interactive) and -t (allocate a tty) allow the shell running
inside Docker to handle Ctrl-C (^C) and other shell commands, so you
can stop a command in the interactive process you ran it. However,
they only work if the containing shell (the one where you ran `docker
run`) is also interactive with a tty hooked up, so we test for that
first in both scripts that invoke `docker run`, using `test -t`.

--init passes signals from *outside* Docker down to its subprocesses,
so that cancellation from *another* context works for our Docker
images. This includes the Cancel button in GitHub Actions.
2022-08-23 13:31:30 -07:00

54 lines
2.1 KiB
Makefile

#
# Copyright (C) 2020 Signal Messenger, LLC.
# SPDX-License-Identifier: AGPL-3.0-only
#
DOCKER ?= docker
.PHONY: docker java_build java_test publish_java
default: java_build
DOCKER_IMAGE := libsignal-builder
DOCKER_TTY_FLAG := $$(test -t 0 && echo -it)
docker_image:
cd .. && $(DOCKER) build --build-arg UID=$$(id -u) --build-arg GID=$$(id -g) -t $(DOCKER_IMAGE) -f java/Dockerfile .
java_build: DOCKER_EXTRA=$(shell [ -L build ] && P=$$(readlink build) && echo -v $$P/:$$P )
java_build: docker_image
$(DOCKER) run $(DOCKER_TTY_FLAG) --init --rm --user $$(id -u):$$(id -g) \
-v `cd .. && pwd`/:/home/libsignal/src $(DOCKER_EXTRA) $(DOCKER_IMAGE) \
sh -c "cd src/java; ./gradlew build"
java_test: java_build
$(DOCKER) run $(DOCKER_TTY_FLAG) --init --rm --user $$(id -u):$$(id -g) \
-v `cd .. && pwd`/:/home/libsignal/src $(DOCKER_EXTRA) $(DOCKER_IMAGE) \
sh -c "cd src/java; ./gradlew test"
SONATYPE_USERNAME ?=
SONATYPE_PASSWORD ?=
KEYRING_FILE ?=
SIGNING_KEY ?=
SIGNING_KEY_PASSSWORD ?=
publish_java: DOCKER_EXTRA = $(shell [ -L build ] && P=$$(readlink build) && echo -v $$P/:$$P )
publish_java: KEYRING_VOLUME := $(dir $(KEYRING_FILE))
publish_java: KEYRING_FILE_ROOT := $(notdir $(KEYRING_FILE))
publish_java: docker_image
@[ -n "$(SONATYPE_USERNAME)" ] || ( echo "SONATYPE_USERNAME is not set" && false )
@[ -n "$(SONATYPE_PASSWORD)" ] || ( echo "SONATYPE_PASSWORD is not set" && false )
@[ -n "$(KEYRING_FILE)" ] || ( echo "KEYRING_FILE is not set" && false )
@[ -n "$(SIGNING_KEY)" ] || ( echo "SIGNING_KEY is not set" && false )
@[ -n "$(SIGNING_KEY_PASSWORD)" ] || ( echo "SIGNING_KEY_PASSWORD is not set" && false )
$(DOCKER) run --rm --user $$(id -u):$$(id -g) \
-v `cd .. && pwd`/:/home/libsignal/src $(DOCKER_EXTRA) \
-v $(KEYRING_VOLUME):/home/libsignal/keyring \
$(DOCKER_IMAGE) \
sh -c "cd src/java; ./gradlew clean publish \
-PsonatypeUsername='$(SONATYPE_USERNAME)' \
-PsonatypePassword='$(SONATYPE_PASSWORD)' \
-Psigning.secretKeyRingFile='/home/libsignal/keyring/$(KEYRING_FILE_ROOT)' \
-Psigning.keyId='$(SIGNING_KEY)' \
-Psigning.password='$(SIGNING_KEY_PASSWORD)'"