rabbitmq-server/mk/github-actions.mk

166 lines
4.8 KiB
Makefile

YTT ?= /usr/local/bin/ytt
$(YTT):
$(error Please install ytt from https://get-ytt.io/)
VENDORED_COMPONENTS = rabbit_common \
rabbit \
amqp_client \
amqp10_client \
amqp10_common \
rabbitmq_amqp1_0 \
rabbitmq_auth_backend_cache \
rabbitmq_auth_backend_http \
rabbitmq_auth_backend_ldap \
rabbitmq_auth_backend_oauth2 \
rabbitmq_auth_mechanism_ssl \
rabbitmq_aws \
rabbitmq_cli \
rabbitmq_codegen \
rabbitmq_consistent_hash_exchange \
rabbitmq_event_exchange \
rabbitmq_federation \
rabbitmq_federation_management \
rabbitmq_jms_topic_exchange \
rabbitmq_management \
rabbitmq_management_agent \
rabbitmq_mqtt \
rabbitmq_peer_discovery_common \
rabbitmq_peer_discovery_aws \
rabbitmq_peer_discovery_k8s \
rabbitmq_peer_discovery_consul \
rabbitmq_peer_discovery_etcd \
rabbitmq_prometheus \
rabbitmq_random_exchange \
rabbitmq_recent_history_exchange \
rabbitmq_sharding \
rabbitmq_shovel \
rabbitmq_shovel_management \
rabbitmq_stomp \
rabbitmq_stream \
rabbitmq_top \
rabbitmq_tracing \
rabbitmq_trust_store \
rabbitmq_web_dispatch \
rabbitmq_web_mqtt \
rabbitmq_web_mqtt_examples \
rabbitmq_web_stomp \
rabbitmq_web_stomp_examples
DEPS_YAML_FILE = workflow_sources/deps.yml
define dep_yaml_chunk
$(eval SUITES := $(sort $(subst _SUITE.erl,,$(notdir $(wildcard deps/$(1)/test/*_SUITE.erl)))))
echo "\n- name: $(1)\n suites:$(if $(SUITES),$(foreach suite,$(SUITES),\n - name: $(suite)), [])" >> $(DEPS_YAML_FILE);
endef
$(DEPS_YAML_FILE):
@echo "#@data/values\n---\n#@overlay/match missing_ok=True\ndeps:" > $@
@$(foreach dep,$(VENDORED_COMPONENTS),$(call dep_yaml_chunk,$(dep)))
@cat $@ | git stripspace > $@.fixed && mv $@.fixed $@
.github/workflows/base-images.yaml: $(YTT) $(wildcard workflow_sources/base_image/*)
ytt -f workflow_sources/base_image \
-f workflow_sources/base_values.yml \
--output-files /tmp
cat /tmp/workflow.yml | sed s/a_magic_string_that_we_will_sed_to_on/on/ \
> $@
.github/workflows/test-erlang-otp-%.yaml: \
$(YTT) $(DEPS_YAML_FILE) workflow_sources/test-erlang-otp-%.yml $(wildcard workflow_sources/test/*)
ytt -f workflow_sources/test \
-f workflow_sources/base_values.yml \
-f $(DEPS_YAML_FILE) \
-f workflow_sources/test-erlang-otp-$*.yml \
--output-files /tmp
cat /tmp/test-erlang-otp-$*.yml | sed s/a_magic_string_that_we_will_sed_to_on/on/ \
> $@
monorepo-actions: \
.github/workflows/base-images.yaml \
$(patsubst workflow_sources/%.yml,.github/workflows/%.yaml,$(wildcard workflow_sources/test-erlang-otp-*.yml))
DOCKER_REPO ?= eu.gcr.io/cf-rabbitmq-core
.PHONY: erlang-elixir-image-%
erlang-elixir-image-%:
docker build . \
-f ci/dockerfiles/$*/erlang_elixir \
-t $(DOCKER_REPO)/erlang_elixir:$*
.PHONY: ci-base-image-%
ci-base-image-%:
docker build . \
-f ci/dockerfiles/ci-base \
-t $(DOCKER_REPO)/ci-base:$* \
--build-arg ERLANG_VERSION=$*
.PHONY: ci-base-images
ci-base-images: ci-base-image-23.1
PUSHES = $(foreach v,$(ERLANG_VERSIONS),push-base-image-$(v))
.PHONY: $(PUSHES)
$(PUSHES):
docker push $(DOCKER_REPO)/ci-base:$(subst push-base-image-,,$@)
.PHONY: push-base-images
push-base-images: $(PUSHES)
LOCAL_CI_GOALS = $(foreach dep,$(filter-out rabbitmq_cli,$(VENDORED_COMPONENTS)),ci-$(dep))
ERLANG_VERSION ?= 23.1
SKIP_DIALYZE ?= False
TAG = erlang-$(ERLANG_VERSION)-rabbitmq-$(shell git rev-parse HEAD)$(shell git diff-index --quiet HEAD -- || echo -dirty)
LOCAL_IMAGE = $(DOCKER_REPO)/ci:$(TAG)
.PHONY: local-ci-image
local-ci-image:
docker build . \
-f ci/dockerfiles/ci \
-t $(LOCAL_IMAGE) \
--build-arg ERLANG_VERSION=$(ERLANG_VERSION) \
--build-arg GITHUB_RUN_ID=none \
--build-arg BUILDEVENT_APIKEY=$(BUILDEVENT_APIKEY) \
--build-arg GITHUB_SHA=$$(git rev-parse HEAD) \
--build-arg base_rmq_ref=master \
--build-arg current_rmq_ref=$$(git rev-parse --abbrev-ref HEAD) \
--build-arg RABBITMQ_VERSION=3.9.0
.PHONY: $(LOCAL_CI_GOALS)
$(LOCAL_CI_GOALS): local-ci-image
docker run --rm \
--env project=$(subst ci-,,$@) \
--env SKIP_DIALYZE=$(SKIP_DIALYZE) \
--env GITHUB_RUN_ID=none \
--env BUILDEVENT_APIKEY=$(BUILDEVENT_APIKEY) \
--env STEP_START=$$(date +%s) \
--volume /tmp/ct-logs:/ct-logs \
--oom-score-adj -500 \
$(LOCAL_IMAGE) \
/workspace/rabbitmq/ci/scripts/tests.sh
ci-rabbitmq_cli: local-ci-image
docker run --rm \
--env project=$(subst ci-,,$@) \
--env SKIP_DIALYZE=$(SKIP_DIALYZE) \
--env GITHUB_RUN_ID=none \
--env BUILDEVENT_APIKEY=$(BUILDEVENT_APIKEY) \
--env STEP_START=$$(date +%s) \
--volume /tmp/broker-logs:/broker-logs \
$(LOCAL_IMAGE) \
/workspace/rabbitmq/ci/scripts/rabbitmq_cli.sh
.PHONY: docker
docker: local-ci-image
docker run --rm -it \
--oom-score-adj -500 \
$(LOCAL_IMAGE) \
/bin/bash
.PHONY: distclean-%
distclean-%:
$(MAKE) -C deps/$* distclean || echo "Failed to distclean $*"
.PHONY: monorepo-distclean
monorepo-distclean: $(foreach dep,$(VENDORED_COMPONENTS),distclean-$(dep))