diff --git a/.nfpm.yaml b/.nfpm.yaml index ece9110c1..3be825754 100644 --- a/.nfpm.yaml +++ b/.nfpm.yaml @@ -1,7 +1,7 @@ # this is the base "template" for the package name: nginx-agent description: NGINX Agent -arch: ${ARCH} +arch: ${ARCH} # Duplicate this file to create .nfpm.amd64.yaml and .nfpm.arm64.yaml with amd64/arm64 values version: ${VERSION} priority: optional vendor: NGINX Software, Inc. @@ -9,7 +9,7 @@ maintainer: NGINX Inc. homepage: https://github.com/nginx/agent license: Apache 2.0 contents: - - src: ./build/nginx-agent + - src: ^BUILD_PATH^/nginx-agent dst: /usr/bin/nginx-agent - src: nginx-agent.conf dst: /etc/nginx-agent/nginx-agent.conf diff --git a/Makefile.packaging b/Makefile.packaging index 7f09250af..acc6b6510 100644 --- a/Makefile.packaging +++ b/Makefile.packaging @@ -35,83 +35,90 @@ $(PACKAGES_DIR): @mkdir -p $(PACKAGES_DIR)/deb && mkdir -p $(PACKAGES_DIR)/rpm && mkdir -p $(PACKAGES_DIR)/apk .PHONY: package -package: gpg-key $(PACKAGES_DIR) #### Create final packages for all supported distros +package: $(PACKAGES_DIR) #### Create final packages for all supported distros + + # Build binaries for both amd64 and arm64 + for arch in $(DEB_ARCHS); do \ + mkdir -p $(BUILD_DIR)/$${arch}; \ + cp .nfpm.yaml .nfpm.$$arch.yaml; \ + sed -i.bak "s/\^BUILD_PATH\^/\.\/build\/$${arch}/g" ".nfpm.$$arch.yaml"; \ + GOWORK=off CGO_ENABLED=0 GOARCH=$${arch} GOOS=linux \ + go build -pgo=auto -ldflags=${LDFLAGS} \ + -o $(BUILD_DIR)/$${arch}/$(BINARY_NAME) \ + $(PROJECT_DIR)/$(PROJECT_FILE); \ + rm -f .nfpm.$$arch.yaml.bak; \ + done; \ + + @echo "Built binaries:"; \ + find $(BUILD_DIR) -type f -name $(BINARY_NAME) \ + # Create deb packages - @for arch in $(DEB_ARCHS); do \ - GOWORK=off CGO_ENABLED=0 GOARCH=$${arch} GOOS=linux go build -pgo=auto -ldflags=${LDFLAGS} -o $(BINARY_PATH) $(PROJECT_DIR)/$(PROJECT_FILE); \ + for arch in $(DEB_ARCHS); do \ for distro in $(DEB_DISTROS); do \ deb_codename=`echo $$distro | cut -d- -f 2`; \ - VERSION=$(PACKAGE_VERSION)~$${deb_codename} ARCH=$${arch} nfpm pkg --config .nfpm.yaml --packager deb --target ${PACKAGES_DIR}/deb/${PACKAGE_PREFIX}_$(PACKAGE_VERSION)~$${deb_codename}_$${arch}.deb; \ + VERSION=$(PACKAGE_VERSION)~$${deb_codename} nfpm pkg --config .nfpm.$$arch.yaml --packager deb --target ${PACKAGES_DIR}/deb/${PACKAGE_PREFIX}_$(PACKAGE_VERSION)~$${deb_codename}_$${arch}.deb; \ done; \ - rm -rf $(BINARY_PATH); \ done; \ # Create rpm packages - @GOWORK=off CGO_ENABLED=0 GOARCH=amd64 GOOS=linux go build -pgo=auto -ldflags=${LDFLAGS} -o $(BINARY_PATH) $(PROJECT_DIR)/$(PROJECT_FILE) - @for distro in $(RPM_DISTROS); do \ + for distro in $(RPM_DISTROS); do \ rpm_distro=`echo $$distro | cut -d- -f 1`; \ rpm_major=`echo $$distro | cut -d- -f 2`; \ rpm_codename='na'; \ if [ "$$rpm_distro" = "suse" ]; then rpm_codename="sles$$rpm_major"; \ fi; \ if [ "$$rpm_codename" != "na" ]; then \ - VERSION=$(PACKAGE_VERSION) ARCH=amd64 nfpm pkg --config .nfpm.yaml --packager rpm --target $(PACKAGES_DIR)/rpm/${PACKAGE_PREFIX}-$(PACKAGE_VERSION).$${rpm_codename}.ngx.${RPM_ARCH}.rpm; \ + VERSION=$(PACKAGE_VERSION) ARCH=amd64 nfpm pkg --config .nfpm.amd64.yaml --packager rpm --target $(PACKAGES_DIR)/rpm/${PACKAGE_PREFIX}-$(PACKAGE_VERSION).$${rpm_codename}.ngx.${RPM_ARCH}.rpm; \ fi; \ done; \ - rm -rf $(BINARY_PATH) # Create redhat rpm packages - @for arch in $(REDHAT_ARCHS); do \ + for arch in $(REDHAT_ARCHS); do \ goarch=amd64; \ if [ "$$arch" = "aarch64" ]; then goarch="arm64"; fi; \ - GOWORK=off CGO_ENABLED=0 GOARCH=$${goarch} GOOS=linux go build -pgo=auto -ldflags=${LDFLAGS} -o $(BINARY_PATH) $(PROJECT_DIR)/$(PROJECT_FILE); \ for distro in $(REDHAT_VERSIONS); do \ rpm_distro=`echo $$distro | cut -d- -f 1`; \ rpm_major=`echo $$distro | cut -d- -f 2`; \ rpm_codename="el$$rpm_major"; \ - VERSION=$(PACKAGE_VERSION) ARCH=$${arch} nfpm pkg --config .nfpm.yaml --packager rpm --target $(PACKAGES_DIR)/rpm/${PACKAGE_PREFIX}-$(PACKAGE_VERSION).$${rpm_codename}.ngx.$${arch}.rpm; \ + VERSION=$(PACKAGE_VERSION) ARCH=$${arch} nfpm pkg --config .nfpm.$$goarch.yaml --packager rpm --target $(PACKAGES_DIR)/rpm/${PACKAGE_PREFIX}-$(PACKAGE_VERSION).$${rpm_codename}.ngx.$${arch}.rpm; \ done; \ - rm -rf $(BINARY_PATH); \ done; \ # Create amazon rpm packages - @for arch in $(AMAZON_ARCHS); do \ + for arch in $(AMAZON_ARCHS); do \ goarch=amd64; \ if [ "$$arch" = "aarch64" ]; then goarch="arm64"; fi; \ - GOWORK=off CGO_ENABLED=0 GOARCH=$${goarch} GOOS=linux go build -pgo=auto -ldflags=${LDFLAGS} -o $(BINARY_PATH) $(PROJECT_DIR)/$(PROJECT_FILE); \ for version in $(AMAZON_VERSIONS); do \ rpm_major=`echo $$version | cut -d- -f 2`; \ rpm_codename="amzn$$rpm_major";\ - VERSION=$(PACKAGE_VERSION) ARCH=$${arch} nfpm pkg --config .nfpm.yaml --packager rpm --target $(PACKAGES_DIR)/rpm/${PACKAGE_PREFIX}-$(PACKAGE_VERSION).$${rpm_codename}.ngx.$${arch}.rpm; \ + VERSION=$(PACKAGE_VERSION) ARCH=$${arch} nfpm pkg --config .nfpm.$$goarch.yaml --packager rpm --target $(PACKAGES_DIR)/rpm/${PACKAGE_PREFIX}-$(PACKAGE_VERSION).$${rpm_codename}.ngx.$${arch}.rpm; \ done; \ - rm -rf $(BINARY_PATH); \ done; \ # Create apk packages @for arch in $(APK_ARCHS); do \ goarch=amd64; \ if [ "$$arch" = "aarch64" ]; then goarch="arm64"; fi; \ - GOWORK=off CGO_ENABLED=0 GOARCH=$${goarch} GOOS=linux go build -pgo=auto -ldflags=${LDFLAGS} -o $(BINARY_PATH) $(PROJECT_DIR)/$(PROJECT_FILE); \ for version in $(APK_VERSIONS); do \ if [ ! -d "$(PACKAGES_DIR)/apk/v$${version}/$${arch}" ]; then mkdir -p $(PACKAGES_DIR)/apk/v$${version}/$${arch}; fi; \ - VERSION=$(PACKAGE_VERSION) ARCH=$${arch} nfpm pkg --config .nfpm.yaml --packager apk --target $(PACKAGES_DIR)/apk/v$${version}/$${arch}/${PACKAGE_PREFIX}-$(PACKAGE_VERSION).apk; \ + VERSION=$(PACKAGE_VERSION) ARCH=$${arch} nfpm pkg --config .nfpm.$$goarch.yaml --packager apk --target $(PACKAGES_DIR)/apk/v$${version}/$${arch}/${PACKAGE_PREFIX}-$(PACKAGE_VERSION).apk; \ done; \ - rm -rf $(BINARY_PATH); \ done; \ # Package build complete - echo "DEB packages:"; \ - find $(PACKAGES_DIR)/deb ;\ + find $(PACKAGES_DIR)/deb -type f | grep -E "${BINARY_NAME}[-_]${PACKAGE_VERSION}" | sort; \ echo "RPM packages:"; \ - find $(PACKAGES_DIR)/rpm ;\ + find $(PACKAGES_DIR)/rpm -type f | grep -E "${BINARY_NAME}[-_]${PACKAGE_VERSION}" | sort; \ echo "APK packages:"; \ - find $(PACKAGES_DIR)/apk ;\ + find $(PACKAGES_DIR)/apk -type f | grep -E "${BINARY_NAME}[-_]${PACKAGE_VERSION}" | sort; \ # Create tarball containing all packages - cd $(PACKAGES_DIR) && tar -czvf "./$(TARBALL_NAME)" * && cd ../..; \ + @echo "Creating tarball: $(TARBALL_NAME)"; \ + rm -f $(PACKAGES_DIR)/$(TARBALL_NAME); \ + pushd $(PACKAGES_DIR) && tar -czvf "./$(TARBALL_NAME)" * && popd; \ .PHONY: gpg-key gpg-key: ## Generate GPG public key