rss-funnel 0.0.5

A composable feed processing pipeline
APP_NAME ?= rss-funnel
IMAGE_USER ?= shouya
IMAGE_HOST ?= git.lain.li
IMAGE_NAME ?= $(IMAGE_HOST)/$(IMAGE_USER)/$(APP_NAME)

PLATFORM ?= linux/amd64
TARGET ?= x86_64-unknown-linux-musl
BINARY = target/$(TARGET)/release/$(APP_NAME)
SOURCES = $(wildcard **/*.rs) Cargo.toml Cargo.lock inspector-assets

VERSION ?= v$(shell git describe --tags --always --dirty)

.PHONY: inspector-assets
inspector-assets:
	cd inspector && pnpm build

target/x86_64-unknown-linux-musl/release/$(APP_NAME): $(SOURCES)
	cargo build --release --target x86_64-unknown-linux-musl

target/aarch64-unknown-linux-musl/release/$(APP_NAME): $(SOURCES)
	cross build --release --target aarch64-unknown-linux-musl

build-docker-multiarch:
	podman manifest create $(IMAGE_NAME):$(VERSION) \
		$(IMAGE_NAME):$(VERSION)-x86_64-unknown-linux-musl \
		$(IMAGE_NAME):$(VERSION)-aarch64-unknown-linux-musl
	podman tag $(IMAGE_NAME):$(VERSION) $(IMAGE_NAME):latest

build-docker-$(TARGET): $(BINARY)
	echo "FROM scratch\nCOPY $< /$(APP_NAME)\nCMD [\"/$(APP_NAME)\"]\n" | \
		podman build -f - . \
			--platform $(PLATFORM) \
			-t $(IMAGE_NAME):latest-$(TARGET) \
			-t $(IMAGE_NAME):$(VERSION)-$(TARGET)

push-docker: build-docker-$(TARGET)
	podman push $(IMAGE_NAME):$(VERSION)-$(TARGET)
	podman push $(IMAGE_NAME):latest-$(TARGET)

push-docker-multiarch: build-docker-multiarch
	podman manifest push $(IMAGE_NAME):$(VERSION)
	podman manifest push $(IMAGE_NAME):latest

.PHONY: build-docker build-docker-multiarch push-docker push-docker-multiarch