|
Packit Service |
4d2de5 |
#
|
|
Packit Service |
4d2de5 |
# Maintenance Helpers
|
|
Packit Service |
4d2de5 |
#
|
|
Packit Service |
4d2de5 |
# This makefile contains targets used for development, as well as helpers to
|
|
Packit Service |
4d2de5 |
# aid automatization of maintenance. Unless a target is documented in
|
|
Packit Service |
4d2de5 |
# `make help`, it is not supported and is only meant to be used by developers
|
|
Packit Service |
4d2de5 |
# to aid their daily development work.
|
|
Packit Service |
4d2de5 |
#
|
|
Packit Service |
4d2de5 |
# All supported targets honor the `SRCDIR` variable to find the source-tree.
|
|
Packit Service |
4d2de5 |
# For most unsupported targets, you are expected to have the source-tree as
|
|
Packit Service |
4d2de5 |
# your working directory. To specify a different source-tree, simply override
|
|
Packit Service |
4d2de5 |
# the variable via `SRCDIR=<path>` on the commandline. By default, the working
|
|
Packit Service |
4d2de5 |
# directory is used for build output, but `BUILDDIR=<path>` allows overriding
|
|
Packit Service |
4d2de5 |
# it.
|
|
Packit Service |
4d2de5 |
#
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
BUILDDIR ?= .
|
|
Packit Service |
4d2de5 |
SRCDIR ?= .
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
RST2MAN ?= rst2man
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
#
|
|
Packit Service |
4d2de5 |
# Automatic Variables
|
|
Packit Service |
4d2de5 |
#
|
|
Packit Service |
4d2de5 |
# This section contains a bunch of automatic variables used all over the place.
|
|
Packit Service |
4d2de5 |
# They mostly try to fetch information from the repository sources to avoid
|
|
Packit Service |
4d2de5 |
# hard-coding them in this makefile.
|
|
Packit Service |
4d2de5 |
#
|
|
Packit Service |
4d2de5 |
# Most of the variables here are pre-fetched so they will only ever be
|
|
Packit Service |
4d2de5 |
# evaluated once. This, however, means they are always executed regardless of
|
|
Packit Service |
4d2de5 |
# which target is run.
|
|
Packit Service |
4d2de5 |
#
|
|
Packit Service |
4d2de5 |
# VERSION:
|
|
Packit Service |
4d2de5 |
# This evaluates the `Version` field of the specfile. Therefore, it will
|
|
Packit Service |
4d2de5 |
# be set to the latest version number of this repository without any
|
|
Packit Service |
4d2de5 |
# prefix (just a plain number).
|
|
Packit Service |
4d2de5 |
#
|
|
Packit Service |
4d2de5 |
# COMMIT:
|
|
Packit Service |
4d2de5 |
# This evaluates to the latest git commit sha. This will not work if
|
|
Packit Service |
4d2de5 |
# the source is not a git checkout. Hence, this variable is not
|
|
Packit Service |
4d2de5 |
# pre-fetched but evaluated at time of use.
|
|
Packit Service |
4d2de5 |
#
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
VERSION := $(shell (cd "$(SRCDIR)" && grep "^Version:" osbuild-composer.spec | sed 's/[^[:digit:]]*\([[:digit:]]\+\).*/\1/'))
|
|
Packit Service |
4d2de5 |
COMMIT = $(shell (cd "$(SRCDIR)" && git rev-parse HEAD))
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
#
|
|
Packit Service |
4d2de5 |
# Generic Targets
|
|
Packit Service |
4d2de5 |
#
|
|
Packit Service |
4d2de5 |
# The following is a set of generic targets used across the makefile. The
|
|
Packit Service |
4d2de5 |
# following targets are defined:
|
|
Packit Service |
4d2de5 |
#
|
|
Packit Service |
4d2de5 |
# help
|
|
Packit Service |
4d2de5 |
# This target prints all supported targets. It is meant as
|
|
Packit Service |
4d2de5 |
# documentation of targets we support and might use outside of this
|
|
Packit Service |
4d2de5 |
# repository.
|
|
Packit Service |
4d2de5 |
# This is also the default target.
|
|
Packit Service |
4d2de5 |
#
|
|
Packit Service |
4d2de5 |
# $(BUILDDIR)/
|
|
Packit Service |
4d2de5 |
# $(BUILDDIR)/%/
|
|
Packit Service |
4d2de5 |
# This target simply creates the specified directory. It is limited to
|
|
Packit Service |
4d2de5 |
# the build-dir as a safety measure. Note that this requires you to use
|
|
Packit Service |
4d2de5 |
# a trailing slash after the directory to not mix it up with regular
|
|
Packit Service |
4d2de5 |
# files. Lastly, you mostly want this as order-only dependency, since
|
|
Packit Service |
4d2de5 |
# timestamps on directories do not affect their content.
|
|
Packit Service |
4d2de5 |
#
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
.PHONY: help
|
|
Packit Service |
4d2de5 |
help:
|
|
Packit Service |
4d2de5 |
@echo "make [TARGETS...]"
|
|
Packit Service |
4d2de5 |
@echo
|
|
Packit Service |
4d2de5 |
@echo "This is the maintenance makefile of osbuild. The following"
|
|
Packit Service |
4d2de5 |
@echo "targets are available:"
|
|
Packit Service |
4d2de5 |
@echo
|
|
Packit Service |
4d2de5 |
@echo " help: Print this usage information."
|
|
Packit Service |
4d2de5 |
@echo " man: Generate all man-pages"
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
$(BUILDDIR)/:
|
|
Packit Service |
4d2de5 |
mkdir -p "$@"
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
$(BUILDDIR)/%/:
|
|
Packit Service |
4d2de5 |
mkdir -p "$@"
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
#
|
|
Packit Service |
4d2de5 |
# Documentation
|
|
Packit Service |
4d2de5 |
#
|
|
Packit Service |
4d2de5 |
# The following targets build the included documentation. This includes the
|
|
Packit Service |
4d2de5 |
# packaged man-pages, but also all other kinds of documentation that needs to
|
|
Packit Service |
4d2de5 |
# be generated. Note that these targets are relied upon by automatic
|
|
Packit Service |
4d2de5 |
# deployments to our website, as well as package manager scripts.
|
|
Packit Service |
4d2de5 |
#
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
MANPAGES_RST = $(wildcard $(SRCDIR)/docs/*.[0123456789].rst)
|
|
Packit Service |
4d2de5 |
MANPAGES_TROFF = $(patsubst $(SRCDIR)/%.rst,$(BUILDDIR)/%,$(MANPAGES_RST))
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
$(MANPAGES_TROFF): $(BUILDDIR)/docs/%: $(SRCDIR)/docs/%.rst | $(BUILDDIR)/docs/
|
|
Packit Service |
4d2de5 |
$(RST2MAN) "$<" "$@"
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
.PHONY: man
|
|
Packit Service |
4d2de5 |
man: $(MANPAGES_TROFF)
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
#
|
|
Packit Service |
4d2de5 |
# Maintenance Targets
|
|
Packit Service |
4d2de5 |
#
|
|
Packit Service |
4d2de5 |
# The following targets are meant for development and repository maintenance.
|
|
Packit Service |
4d2de5 |
# They are not supported nor is their use recommended in scripts.
|
|
Packit Service |
4d2de5 |
#
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
.PHONY: build
|
|
Packit Service |
4d2de5 |
build:
|
|
Packit Service |
4d2de5 |
go build -o osbuild-composer ./cmd/osbuild-composer/
|
|
Packit Service |
4d2de5 |
go build -o osbuild-worker ./cmd/osbuild-worker/
|
|
Packit Service |
4d2de5 |
go build -o osbuild-pipeline ./cmd/osbuild-pipeline/
|
|
Packit Service |
4d2de5 |
go build -o osbuild-upload-azure ./cmd/osbuild-upload-azure/
|
|
Packit Service |
4d2de5 |
go build -o osbuild-upload-aws ./cmd/osbuild-upload-aws/
|
|
Packit Service |
4d2de5 |
go test -c -tags=integration -o osbuild-tests ./cmd/osbuild-tests/main_test.go
|
|
Packit Service |
4d2de5 |
go test -c -tags=integration -o osbuild-weldr-tests ./internal/client/
|
|
Packit Service |
4d2de5 |
go test -c -tags=integration -o osbuild-dnf-json-tests ./cmd/osbuild-dnf-json-tests/main_test.go
|
|
Packit Service |
4d2de5 |
go test -c -tags=integration,travis -o osbuild-image-tests ./cmd/osbuild-image-tests/
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
.PHONY: install
|
|
Packit Service |
4d2de5 |
install:
|
|
Packit Service |
4d2de5 |
- mkdir -p /usr/libexec/osbuild-composer
|
|
Packit Service |
4d2de5 |
cp osbuild-composer /usr/libexec/osbuild-composer/
|
|
Packit Service |
4d2de5 |
cp osbuild-worker /usr/libexec/osbuild-composer/
|
|
Packit Service |
4d2de5 |
cp dnf-json /usr/libexec/osbuild-composer/
|
|
Packit Service |
4d2de5 |
- mkdir -p /usr/share/osbuild-composer/repositories
|
|
Packit Service |
4d2de5 |
cp repositories/* /usr/share/osbuild-composer/repositories
|
|
Packit Service |
4d2de5 |
- mkdir -p /etc/sysusers.d/
|
|
Packit Service |
4d2de5 |
cp distribution/osbuild-composer.conf /etc/sysusers.d/
|
|
Packit Service |
4d2de5 |
systemd-sysusers osbuild-composer.conf
|
|
Packit Service |
4d2de5 |
- mkdir -p /etc/systemd/system/
|
|
Packit Service |
4d2de5 |
cp distribution/*.service /etc/systemd/system/
|
|
Packit Service |
4d2de5 |
cp distribution/*.socket /etc/systemd/system/
|
|
Packit Service |
4d2de5 |
systemctl daemon-reload
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
.PHONY: ca
|
|
Packit Service |
4d2de5 |
ca:
|
|
Packit Service |
4d2de5 |
ifneq (/etc/osbuild-composer/ca-key.pem/etc/osbuild-composer/ca-crt.pem,$(wildcard /etc/osbuild-composer/ca-key.pem)$(wildcard /etc/osbuild-composer/ca-crt.pem))
|
|
Packit Service |
4d2de5 |
@echo CA key or certificate file is missing, generating a new pair...
|
|
Packit Service |
4d2de5 |
- mkdir -p /etc/osbuild-composer
|
|
Packit Service |
4d2de5 |
openssl req -new -nodes -x509 -days 365 -keyout /etc/osbuild-composer/ca-key.pem -out /etc/osbuild-composer/ca-crt.pem -subj "/CN=osbuild.org"
|
|
Packit Service |
4d2de5 |
else
|
|
Packit Service |
4d2de5 |
@echo CA key and certificate files already exist, skipping...
|
|
Packit Service |
4d2de5 |
endif
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
.PHONY: composer-key-pair
|
|
Packit Service |
4d2de5 |
composer-key-pair: ca
|
|
Packit Service |
4d2de5 |
openssl genrsa -out /etc/osbuild-composer/composer-key.pem 2048
|
|
Packit Service |
4d2de5 |
openssl req -new -sha256 -key /etc/osbuild-composer/composer-key.pem -out /etc/osbuild-composer/composer-csr.pem -subj "/CN=localhost" # TODO: we need to generate certificates with another hostname
|
|
Packit Service |
4d2de5 |
openssl x509 -req -in /etc/osbuild-composer/composer-csr.pem -CA /etc/osbuild-composer/ca-crt.pem -CAkey /etc/osbuild-composer/ca-key.pem -CAcreateserial -out /etc/osbuild-composer/composer-crt.pem
|
|
Packit Service |
4d2de5 |
chown _osbuild-composer:_osbuild-composer /etc/osbuild-composer/composer-key.pem /etc/osbuild-composer/composer-csr.pem /etc/osbuild-composer/composer-crt.pem
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
.PHONY: worker-key-pair
|
|
Packit Service |
4d2de5 |
worker-key-pair: ca
|
|
Packit Service |
4d2de5 |
openssl genrsa -out /etc/osbuild-composer/worker-key.pem 2048
|
|
Packit Service |
4d2de5 |
openssl req -new -sha256 -key /etc/osbuild-composer/worker-key.pem -out /etc/osbuild-composer/worker-csr.pem -subj "/CN=localhost"
|
|
Packit Service |
4d2de5 |
openssl x509 -req -in /etc/osbuild-composer/worker-csr.pem -CA /etc/osbuild-composer/ca-crt.pem -CAkey /etc/osbuild-composer/ca-key.pem -CAcreateserial -out /etc/osbuild-composer/worker-crt.pem
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
#
|
|
Packit Service |
4d2de5 |
# Building packages
|
|
Packit Service |
4d2de5 |
#
|
|
Packit Service |
4d2de5 |
# The following rules build osbuild-composer packages from the current HEAD
|
|
Packit Service |
4d2de5 |
# commit, based on the spec file in this directory. The resulting packages
|
|
Packit Service |
4d2de5 |
# have the commit hash in their version, so that they don't get overwritten
|
|
Packit Service |
4d2de5 |
# when calling `make rpm` again after switching to another branch.
|
|
Packit Service |
4d2de5 |
#
|
|
Packit Service |
4d2de5 |
# All resulting files (spec files, source rpms, rpms) are written into
|
|
Packit Service |
4d2de5 |
# ./rpmbuild, using rpmbuild's usual directory structure.
|
|
Packit Service |
4d2de5 |
#
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
OLD_RPM_SPECFILE=rpmbuild/SPECS/golang-github-osbuild-composer-$(COMMIT).spec
|
|
Packit Service |
4d2de5 |
RPM_SPECFILE=rpmbuild/SPECS/osbuild-composer-$(COMMIT).spec
|
|
Packit Service |
4d2de5 |
RPM_TARBALL=rpmbuild/SOURCES/osbuild-composer-$(COMMIT).tar.gz
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
$(OLD_RPM_SPECFILE):
|
|
Packit Service |
4d2de5 |
mkdir -p $(CURDIR)/rpmbuild/SPECS
|
|
Packit Service |
4d2de5 |
(echo "%global commit $(COMMIT)"; git show HEAD:golang-github-osbuild-composer.spec) > $(OLD_RPM_SPECFILE)
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
$(RPM_SPECFILE):
|
|
Packit Service |
4d2de5 |
mkdir -p $(CURDIR)/rpmbuild/SPECS
|
|
Packit Service |
4d2de5 |
(echo "%global commit $(COMMIT)"; git show HEAD:osbuild-composer.spec) > $(RPM_SPECFILE)
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
$(RPM_TARBALL):
|
|
Packit Service |
4d2de5 |
mkdir -p $(CURDIR)/rpmbuild/SOURCES
|
|
Packit Service |
4d2de5 |
git archive --prefix=osbuild-composer-$(COMMIT)/ --format=tar.gz HEAD > $(RPM_TARBALL)
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
.PHONY: srpm
|
|
Packit Service |
4d2de5 |
srpm: $(RPM_SPECFILE) $(RPM_TARBALL)
|
|
Packit Service |
4d2de5 |
rpmbuild -bs \
|
|
Packit Service |
4d2de5 |
--define "_topdir $(CURDIR)/rpmbuild" \
|
|
Packit Service |
4d2de5 |
--with tests \
|
|
Packit Service |
4d2de5 |
$(RPM_SPECFILE)
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
.PHONY: rpm
|
|
Packit Service |
4d2de5 |
rpm: $(RPM_SPECFILE) $(RPM_TARBALL)
|
|
Packit Service |
4d2de5 |
rpmbuild -bb \
|
|
Packit Service |
4d2de5 |
--define "_topdir $(CURDIR)/rpmbuild" \
|
|
Packit Service |
4d2de5 |
--with tests \
|
|
Packit Service |
4d2de5 |
$(RPM_SPECFILE)
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
.PHONY: old-srpm
|
|
Packit Service |
4d2de5 |
old-srpm: $(OLD_RPM_SPECFILE) $(RPM_TARBALL)
|
|
Packit Service |
4d2de5 |
rpmbuild -bs \
|
|
Packit Service |
4d2de5 |
--define "_topdir $(CURDIR)/rpmbuild" \
|
|
Packit Service |
4d2de5 |
$(OLD_RPM_SPECFILE)
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
.PHONY: old-rpm
|
|
Packit Service |
4d2de5 |
old-rpm: $(OLD_RPM_SPECFILE) $(RPM_TARBALL)
|
|
Packit Service |
4d2de5 |
rpmbuild -bb \
|
|
Packit Service |
4d2de5 |
--define "_topdir $(CURDIR)/rpmbuild" \
|
|
Packit Service |
4d2de5 |
$(OLD_RPM_SPECFILE)
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
#
|
|
Packit Service |
4d2de5 |
# Releasing
|
|
Packit Service |
4d2de5 |
#
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
NEXT_VERSION := $(shell expr "$(VERSION)" + 1)
|
|
Packit Service |
4d2de5 |
|
|
Packit Service |
4d2de5 |
.PHONY: release
|
|
Packit Service |
4d2de5 |
release:
|
|
Packit Service |
4d2de5 |
@echo
|
|
Packit Service |
4d2de5 |
@echo "Checklist for release of osbuild-composer-$(NEXT_VERSION):"
|
|
Packit Service |
4d2de5 |
@echo
|
|
Packit Service |
4d2de5 |
@echo " * Create news entry in NEWS.md with a short description of"
|
|
Packit Service |
4d2de5 |
@echo " any changes since the last release, which are relevant to"
|
|
Packit Service |
4d2de5 |
@echo " users, packagers, distributors, or dependent projects."
|
|
Packit Service |
4d2de5 |
@echo
|
|
Packit Service |
4d2de5 |
@echo " Use the following template, break lines at 80ch:"
|
|
Packit Service |
4d2de5 |
@echo
|
|
Packit Service |
4d2de5 |
@echo "--------------------------------------------------------------------------------"
|
|
Packit Service |
4d2de5 |
@echo "## CHANGES WITH $(NEXT_VERSION):"
|
|
Packit Service |
4d2de5 |
@echo
|
|
Packit Service |
4d2de5 |
@echo " * ..."
|
|
Packit Service |
4d2de5 |
@echo
|
|
Packit Service |
4d2de5 |
@echo " * ..."
|
|
Packit Service |
4d2de5 |
@echo
|
|
Packit Service |
4d2de5 |
@echo -n "Contributions from: "
|
|
Packit Service |
4d2de5 |
# We omit the contributor list if `git log` fails. If you hit this,
|
|
Packit Service |
4d2de5 |
# consider fetching missing tags via `git fetch --tags`, or just copy
|
|
Packit Service |
4d2de5 |
# this command and remove the stderr-redirect.
|
|
Packit Service |
4d2de5 |
@echo `( git log --format='%an, ' v$(VERSION)..HEAD 2>/dev/null | sort -u | tr -d '\n' | sed 's/, $$//' ) || echo`
|
|
Packit Service |
4d2de5 |
@echo
|
|
Packit Service |
4d2de5 |
@echo "— Location, YYYY-MM-DD"
|
|
Packit Service |
4d2de5 |
@echo "--------------------------------------------------------------------------------"
|
|
Packit Service |
4d2de5 |
@echo
|
|
Packit Service |
4d2de5 |
@echo " To get a list of changes since the last release, you may use:"
|
|
Packit Service |
4d2de5 |
@echo
|
|
Packit Service |
4d2de5 |
@echo " git log v$(VERSION)..HEAD"
|
|
Packit Service |
4d2de5 |
@echo
|
|
Packit Service |
4d2de5 |
@echo " * Bump the project version. The canonical location so far is"
|
|
Packit Service |
4d2de5 |
@echo " 'osbuild-composer.spec' and"
|
|
Packit Service |
4d2de5 |
@echo " 'golang-github-osbuild-composer.spec'."
|
|
Packit Service |
4d2de5 |
@echo
|
|
Packit Service |
4d2de5 |
@echo " * Make sure the spec-file is updated for the new release and"
|
|
Packit Service |
4d2de5 |
@echo " correctly supports all new features. This should already be"
|
|
Packit Service |
4d2de5 |
@echo " done by previous commits that introduced the changes, but"
|
|
Packit Service |
4d2de5 |
@echo " a sanity check does not hurt."
|
|
Packit Service |
4d2de5 |
@echo
|
|
Packit Service |
4d2de5 |
@echo " * Commit the version bump, specfile changes and NEWS.md in any"
|
|
Packit Service |
4d2de5 |
@echo " order you want."
|
|
Packit Service |
4d2de5 |
@echo
|
|
Packit Service |
4d2de5 |
@echo " * Tag the release via:"
|
|
Packit Service |
4d2de5 |
@echo
|
|
Packit Service |
4d2de5 |
@echo " git tag -s -m 'osbuild-composer $(NEXT_VERSION)' v$(NEXT_VERSION) HEAD"
|
|
Packit Service |
4d2de5 |
@echo
|
|
Packit Service |
4d2de5 |
@echo " * Push master as well as the tag:"
|
|
Packit Service |
4d2de5 |
@echo
|
|
Packit Service |
4d2de5 |
@echo " git push origin master"
|
|
Packit Service |
4d2de5 |
@echo " git push origin v$(NEXT_VERSION)"
|
|
Packit Service |
4d2de5 |
@echo
|
|
Packit Service |
4d2de5 |
@echo " * Create a release on github. Use 'NEWS.md' verbatim from the"
|
|
Packit Service |
4d2de5 |
@echo " top until the end of the section for this release as release"
|
|
Packit Service |
4d2de5 |
@echo " notes. Use 'v$(NEXT_VERSION)' as release name and as tag for"
|
|
Packit Service |
4d2de5 |
@echo " the release."
|
|
Packit Service |
4d2de5 |
@echo
|