diff --git a/.packit.sh b/.packit.sh deleted file mode 100644 index 3af84ee3..00000000 --- a/.packit.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env bash - -# This script handles any custom processing of the spec file generated using the `post-upstream-clone` -# action and gets used by the fix-spec-file action in .packit.yaml. - -set -eo pipefail - -# Get Version from HEAD -VERSION=$(grep '^const Version' version/version.go | cut -d\" -f2 | sed -e 's/-/~/') - -# Generate source tarball -git archive --prefix=skopeo-$VERSION/ -o skopeo-$VERSION.tar.gz HEAD - -# RPM Spec modifications - -# Update Version in spec with Version from Cargo.toml -sed -i "s/^Version:.*/Version: $VERSION/" skopeo.spec - -# Update Release in spec with Packit's release envvar -sed -i "s/^Release:.*/Release: $PACKIT_RPMSPEC_RELEASE%{?dist}/" skopeo.spec - -# Update Source tarball name in spec -sed -i "s/^Source:.*.tar.gz/Source: skopeo-$VERSION.tar.gz/" skopeo.spec - -# Update setup macro to use the correct build dir -sed -i "s/^%setup.*/%autosetup -Sgit -n %{name}-$VERSION/" skopeo.spec diff --git a/.packit.yaml b/.packit.yaml index 54de193d..9596ac9b 100644 --- a/.packit.yaml +++ b/.packit.yaml @@ -8,8 +8,11 @@ # Build targets can be found at: # https://copr.fedorainfracloud.org/coprs/rhcontainerbot/packit-builds/ +# and +# https://copr.fedorainfracloud.org/coprs/rhcontainerbot/podman-next/ -specfile_path: skopeo.spec +specfile_path: rpm/skopeo.spec +upstream_tag_template: v{version} jobs: - &copr @@ -20,15 +23,28 @@ jobs: enable_net: true srpm_build_deps: - make - - rpkg - actions: - post-upstream-clone: - - "rpkg spec --outdir ./" - fix-spec-file: - - "bash .packit.sh" - <<: *copr # Run on commit to main branch trigger: commit branch: main project: podman-next + + - job: propose_downstream + trigger: release + update_release: false + dist_git_branches: + - fedora-all + actions: + pre-sync: + - "bash rpm/update-spec-provides.sh" + + - job: koji_build + trigger: commit + dist_git_branches: + - fedora-all + + - job: bodhi_update + trigger: commit + dist_git_branches: + - fedora-branched # rawhide updates are created automatically diff --git a/rpm/skopeo.spec b/rpm/skopeo.spec new file mode 100644 index 00000000..0655cdc2 --- /dev/null +++ b/rpm/skopeo.spec @@ -0,0 +1,200 @@ +%global with_debug 1 + +%if 0%{?with_debug} +%global _find_debuginfo_dwz_opts %{nil} +%global _dwz_low_mem_die_limit 0 +%else +%global debug_package %{nil} +%endif + +# RHEL 8's default %%gobuild macro doesn't account for the BUILDTAGS variable, so we +# set it separately here and do not depend on RHEL 8's go-srpm-macros package. +%if !0%{?fedora} && 0%{?rhel} <= 8 +%define gobuild(o:) go build -buildmode pie -compiler gc -tags="rpm_crashtraceback libtrust_openssl ${BUILDTAGS:-}" -ldflags "-linkmode=external -compressdwarf=false ${LDFLAGS:-} -B 0x$(head -c20 /dev/urandom|od -An -tx1|tr -d ' \\n') -extldflags '%__global_ldflags'" -a -v -x %{?**}; +%endif + +%global gomodulesmode GO111MODULE=on + +# NOTE: For conditionals %%bcond_with and %%bcond_without, +# See: https://rpm-software-management.github.io/rpm/manual/conditionalbuilds.html + +# copr_username is only set on copr environments, not on others like koji +%if "%{?copr_username}" != "rhcontainerbot" +%bcond_with copr +%else +%bcond_without copr +%endif + +%if 0%{?rhel} +%bcond_with btrfs +%else +%bcond_without btrfs +%endif + +# go-rpm-macros package and autochangelog exists for fedora and rhel9 +%if 0%{?fedora} || 0%{?rhel} >= 9 +%bcond_without go_rpm_macros +%bcond_without manual_changelog +%else +%bcond_with go_rpm_macros +%bcond_without manual_changelog +%endif + +# Only used in official koji builds +# Copr builds set a separate epoch for all environments +%if 0%{?fedora} && ! 0%{?rhel} +%define conditional_epoch 1 +%else +%define conditional_epoch 2 +%endif + +%global provider github +%global provider_tld com +%global project containers +%global repo skopeo +# https://github.com/containers/skopeo +%global import_path %{provider}.%{provider_tld}/%{project}/%{repo} +%global git0 https://%{import_path} + +Name: %{repo} +%if %{with copr} +Epoch: 102 +%else +Epoch: %{conditional_epoch} +%endif +# DO NOT TOUCH the Version string! +# The TRUE source of this specfile is: +# https://github.com/containers/skopeo/blob/main/rpm/skopeo.spec +# If that's what you're reading, Version must be 0, and will be updated by Packit for +# copr and koji builds. +# If you're reading this on dist-git, the version is automatically filled in by Packit. +Version: 0 +License: Apache-2.0 and BSD-2-Clause and BSD-3-Clause and ISC and MIT and MPL-2.0 +Release: %autorelease +%if %{defined golang_arches_future} +ExclusiveArch: %{golang_arches_future} +%else +ExclusiveArch: aarch64 ppc64le s390x x86_64 +%endif +Summary: Inspect container images and repositories on registries +URL: %{git0} +# Tarball fetched from upstream +Source0: %{url}/archive/v%{version}.tar.gz +BuildRequires: go-md2man +%if %{with btrfs} +BuildRequires: btrfs-progs-devel +%endif +BuildRequires: git-core +BuildRequires: golang +%if %{with go_rpm_macros} +BuildRequires: go-rpm-macros +%endif +BuildRequires: gpgme-devel +BuildRequires: libassuan-devel +BuildRequires: pkgconfig(devmapper) +BuildRequires: ostree-devel +BuildRequires: glib2-devel +BuildRequires: make +BuildRequires: shadow-utils-subid-devel +Requires: containers-common >= 4:1-21 +# DO NOT DELETE BELOW LINE - used for updating downstream goimports +# vendored libraries + +%description +Command line utility to inspect images and repositories directly on Docker +registries without the need to pull them + +%package tests +Summary: Tests for %{name} + +Requires: %{name} = %{epoch}:%{version}-%{release} +Requires: bats +Requires: gnupg +Requires: jq +Requires: golang +Requires: podman +Requires: crun +Requires: httpd-tools +Requires: openssl +Requires: fakeroot +Requires: squashfs-tools + +%description tests +%{summary} + +This package contains system tests for %{name} + +%prep +%autosetup -Sgit %{name}-%{version} +# The %%install stage should not rebuild anything but only install what's +# built in the %%build stage. So, remove any dependency on build targets. +sed -i 's/^install-binary: bin\/%{name}.*/install-binary:/' Makefile +sed -i 's/^completions: bin\/%{name}.*/completions:/' Makefile +sed -i 's/^install-docs: docs.*/install-docs:/' Makefile + +%build +%set_build_flags +export CGO_CFLAGS=$CFLAGS + +# These extra flags present in $CFLAGS have been skipped for now as they break the build +CGO_CFLAGS=$(echo $CGO_CFLAGS | sed 's/-flto=auto//g') +CGO_CFLAGS=$(echo $CGO_CFLAGS | sed 's/-Wp,D_GLIBCXX_ASSERTIONS//g') +CGO_CFLAGS=$(echo $CGO_CFLAGS | sed 's/-specs=\/usr\/lib\/rpm\/redhat\/redhat-annobin-cc1//g') + +%ifarch x86_64 +export CGO_CFLAGS="$CGO_CFLAGS -m64 -mtune=generic -fcf-protection=full" +%endif + +BASEBUILDTAGS="$(hack/libdm_tag.sh) $(hack/libsubid_tag.sh)" +%if %{with btrfs} +export BUILDTAGS="$BASEBUILDTAGS $(hack/btrfs_tag.sh) $(hack/btrfs_installed_tag.sh)" +%else +export BUILDTAGS="$BASEBUILDTAGS btrfs_noversion exclude_graphdriver_btrfs" +%endif + +# unset LDFLAGS earlier set from set_build_flags +LDFLAGS='' + +%gobuild -o bin/%{name} ./cmd/%{name} +%{__make} docs + +%install +make \ + DESTDIR=%{buildroot} \ + PREFIX=%{_prefix} \ + install-binary install-docs install-completions + +# system tests +install -d -p %{buildroot}/%{_datadir}/%{name}/test/system +cp -pav systemtest/* %{buildroot}/%{_datadir}/%{name}/test/system/ + +#define license tag if not already defined +%{!?_licensedir:%global license %doc} + +%files +%license LICENSE +%doc README.md +%{_bindir}/%{name} +%{_mandir}/man1/%{name}* +%dir %{_datadir}/bash-completion +%dir %{_datadir}/bash-completion/completions +%{_datadir}/bash-completion/completions/%{name} +%dir %{_datadir}/fish/vendor_completions.d +%{_datadir}/fish/vendor_completions.d/%{name}.fish +%dir %{_datadir}/zsh/site-functions +%{_datadir}/zsh/site-functions/_%{name} + +%files tests +%license LICENSE +%{_datadir}/%{name}/test + +%changelog +%if %{with manual_changelog} +# NOTE: This changelog will be visible on CentOS 8 Stream builds +# Other envs are capable of handling autochangelog +* Tue Jun 13 2023 RH Container Bot +- Placeholder changelog for envs that are not autochangelog-ready. +- Contact upstream if you need to report an issue with the build. +%else +%autochangelog +%endif diff --git a/rpm/update-spec-provides.sh b/rpm/update-spec-provides.sh new file mode 100644 index 00000000..ec468db6 --- /dev/null +++ b/rpm/update-spec-provides.sh @@ -0,0 +1,17 @@ +#!/usr/bin/env bash + +# This script will update the goimports in the rpm spec for downstream fedora +# packaging, via the `propose-downstream` packit action. +# The goimports don't need to be present upstream. + +set -e + +PACKAGE=$(basename $(git rev-parse --show-toplevel)) +# script is run from git root directory +SPEC_FILE=rpm/$PACKAGE.spec + +sed -i '/Provides: bundled(golang.*/d' $SPEC_FILE + +GO_IMPORTS=$(golist --imported --package-path github.com/containers/$PACKAGE --skip-self | sort -u | xargs "-I{}" echo "Provides: bundled(golang({}))") + +awk -v r="$GO_IMPORTS" '/^# vendored libraries/ {print; print r; next} 1' $SPEC_FILE > temp && mv temp $SPEC_FILE diff --git a/skopeo.spec.rpkg b/skopeo.spec.rpkg deleted file mode 100644 index aa300bbb..00000000 --- a/skopeo.spec.rpkg +++ /dev/null @@ -1,126 +0,0 @@ -# For automatic rebuilds in COPR - -# The following tag is to get correct syntax highlighting for this file in vim text editor -# vim: syntax=spec - -# Any additinoal comments should go below this line or else syntax highlighting -# may not work. - -# CAUTION: This is not a replacement for RPMs provided by your distro. -# Only intended to build and test the latest unreleased changes. - -%global with_debug 1 -%global gomodulesmode GO111MODULE=on - -# RHEL 8's default %%gobuild macro doesn't account for the BUILDTAGS variable, so we -# set it separately here and do not depend on RHEL 8's go-srpm-macros package. -%if !0%{?fedora} && 0%{?rhel} <= 8 -%define gobuild(o:) %{gomodulesmode} go build -buildmode pie -compiler gc -tags="rpm_crashtraceback libtrust_openssl ${BUILDTAGS:-}" -ldflags "-linkmode=external -compressdwarf=false ${LDFLAGS:-} -B 0x$(head -c20 /dev/urandom|od -An -tx1|tr -d ' \\n') -extldflags '%__global_ldflags'" -a -v -x %{?**}; -%endif - -%if 0%{?with_debug} -%global _find_debuginfo_dwz_opts %{nil} -%global _dwz_low_mem_die_limit 0 -%else -%global debug_package %{nil} -%endif - -Name: {{{ git_dir_name }}} -Epoch: 101 -Version: {{{ git_dir_version }}} -Release: 1%{?dist} -Summary: Inspect container images and repositories on registries -License: ASL 2.0 -URL: https://github.com/containers/skopeo -VCS: {{{ git_dir_vcs }}} -Source: {{{ git_dir_pack }}} -%if 0%{?fedora} && ! 0%{?rhel} -BuildRequires: btrfs-progs-devel -%endif -BuildRequires: golang >= 1.16.6 -BuildRequires: glib2-devel -BuildRequires: git-core -BuildRequires: go-md2man -%if 0%{?fedora} || 0%{?rhel} >= 9 -BuildRequires: go-rpm-macros -%endif -BuildRequires: pkgconfig(devmapper) -BuildRequires: gpgme-devel -BuildRequires: libassuan-devel -BuildRequires: pkgconfig -BuildRequires: make -BuildRequires: ostree-devel -Requires: containers-common >= 4:1-78 - -%description -Command line utility to inspect images and repositories directly on Docker -registries without the need to pull them. - -%package tests -Summary: Tests for %{name} -Requires: %{name} = %{epoch}:%{version}-%{release} -Requires: bats -Requires: gnupg -Requires: jq -Requires: podman -Requires: httpd-tools -Requires: openssl -Requires: fakeroot -Requires: squashfs-tools - -%description tests -%{summary} - -This package contains system tests for %{name} - -%prep -{{{ git_dir_setup_macro }}} - -sed -i 's/install-binary: bin\/skopeo/install-binary:/' Makefile - -# This will invoke `make` command in the directory with the extracted sources. -%build -%set_build_flags -export CGO_CFLAGS=$CFLAGS -# These extra flags present in $CFLAGS have been skipped for now as they break the build -CGO_CFLAGS=$(echo $CGO_CFLAGS | sed 's/-flto=auto//g') -CGO_CFLAGS=$(echo $CGO_CFLAGS | sed 's/-Wp,D_GLIBCXX_ASSERTIONS//g') -CGO_CFLAGS=$(echo $CGO_CFLAGS | sed 's/-specs=\/usr\/lib\/rpm\/redhat\/redhat-annobin-cc1//g') - -%ifarch x86_64 -export CGO_CFLAGS+=" -m64 -mtune=generic -fcf-protection=full" -%endif - -LDFLAGS="" - -export BUILDTAGS="$(hack/libdm_tag.sh) $(hack/btrfs_installed_tag.sh) $(hack/btrfs_tag.sh)" -%gobuild -o bin/%{name} ./cmd/%{name} - -%install -%{__make} PREFIX=%{buildroot}%{_prefix} install-binary install-docs install-completions - -# system tests -install -d -p %{buildroot}/%{_datadir}/%{name}/test/system -cp -pav systemtest/* %{buildroot}/%{_datadir}/%{name}/test/system/ - -%files -%license LICENSE -%doc README.md -%{_bindir}/%{name} -%{_mandir}/man1/%%{name}* -%dir %{_datadir}/bash-completion -%dir %{_datadir}/bash-completion/completions -%{_datadir}/bash-completion/completions/%{name} -%dir %{_datadir}/fish -%dir %{_datadir}/fish/vendor_completions.d -%{_datadir}/fish/vendor_completions.d/%{name}.fish -%dir %{_datadir}/zsh -%dir %{_datadir}/zsh/site-functions -%{_datadir}/zsh/site-functions/_%{name} - -%files tests -%license LICENSE -%{_datadir}/%{name}/test - -%changelog -{{{ git_dir_changelog }}}