From 32eff39401658bd9d5bce94b79ed71c2d740b34a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 15 Dec 2025 00:32:41 +0000 Subject: [PATCH 1/8] Initial plan From 83fb40189375137940ed2811597e52b9a763cc2e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 15 Dec 2025 00:38:25 +0000 Subject: [PATCH 2/8] Make -buildvcs flag conditional with documentation Co-authored-by: mapitman <4205286+mapitman@users.noreply.github.com> --- .github/workflows/build.yml | 2 +- .github/workflows/release.yml | 4 ++-- Makefile | 22 +++++++++++++++------- PACKAGING.md | 24 ++++++++++++++++++++++++ scripts/ci-sim-fedora.sh | 1 + scripts/ci-sim-ubuntu.sh | 1 + 6 files changed, 44 insertions(+), 10 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 18f4286..89451ce 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -31,6 +31,6 @@ jobs: with: go-version: '1.21' - name: Build - run: VERSION="${{ steps.version.outputs.VERSION }}" make all + run: BUILDVCS_FLAG=-buildvcs=false VERSION="${{ steps.version.outputs.VERSION }}" make all diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ddf5dd6..b768616 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -31,7 +31,7 @@ jobs: go-version: '1.21' - name: Build all binaries - run: VERSION=${{ steps.version.outputs.VERSION }} make all deb + run: BUILDVCS_FLAG=-buildvcs=false VERSION=${{ steps.version.outputs.VERSION }} make all deb - name: Upload artifacts uses: actions/upload-artifact@v4 @@ -76,7 +76,7 @@ jobs: echo "Resolved VERSION=${{ steps.version.outputs.VERSION }}" - name: Build RPM package - run: VERSION=${{ steps.version.outputs.VERSION }} make rpm + run: BUILDVCS_FLAG=-buildvcs=false VERSION=${{ steps.version.outputs.VERSION }} make rpm - name: Copy RPMs to workspace run: | diff --git a/Makefile b/Makefile index 060ed51..4499d14 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,13 @@ MANSECTION ?= 1 SHELL=/bin/bash + +# Conditionally disable VCS info embedding in Go builds +# Set BUILDVCS_FLAG=-buildvcs=false when: +# - Building in CI environments where .git may not be accessible +# - Building in containers/chroots where git metadata is unavailable +# - VCS info is not needed (default: embed VCS info if available) +BUILDVCS_FLAG ?= + .PHONY: clean snap rpm rpm-setup rpm-local rpm-clean ci-sim-ubuntu ci-sim-fedora ci-sim default: linux all: linux windows darwin freebsd @@ -37,36 +45,36 @@ snap: snapcraft pack bin/linux-amd64/mdview: manpage - env GOOS=linux GOARCH=amd64 go build -buildvcs=false -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/linux-amd64/mdview + env GOOS=linux GOARCH=amd64 go build $(BUILDVCS_FLAG) -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/linux-amd64/mdview cp mdview.1 bin/linux-amd64/ tar czvf mdview-$(VERSION)-linux-amd64.tar.gz --transform s/linux-amd64/mdview-$(VERSION)/ -C bin linux-amd64 bin/linux-i386/mdview: - env GOOS=linux GOARCH=386 go build -buildvcs=false -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/linux-i386/mdview + env GOOS=linux GOARCH=386 go build $(BUILDVCS_FLAG) -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/linux-i386/mdview cp mdview.1 bin/linux-i386/ tar czvf mdview-$(VERSION)-linux-i386.tar.gz --transform s/linux-i386/mdview-$(VERSION)/ -C bin linux-i386 bin/linux-arm64/mdview: - env GOOS=linux GOARCH=arm64 go build -buildvcs=false -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/linux-arm64/mdview + env GOOS=linux GOARCH=arm64 go build $(BUILDVCS_FLAG) -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/linux-arm64/mdview cp mdview.1 bin/linux-arm64/ tar czvf mdview-$(VERSION)-linux-arm64.tar.gz --transform s/linux-arm64/mdview-$(VERSION)/ -C bin linux-arm64 bin/windows-amd64/mdview.exe: - env GOOS=windows GOARCH=amd64 go build -buildvcs=false -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/windows-amd64/mdview.exe + env GOOS=windows GOARCH=amd64 go build $(BUILDVCS_FLAG) -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/windows-amd64/mdview.exe zip -j mdview-$(VERSION)-windows-amd64.zip bin/windows-amd64/mdview.exe bin/darwin-amd64/mdview: - env GOOS=darwin GOARCH=amd64 go build -buildvcs=false -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/darwin-amd64/mdview + env GOOS=darwin GOARCH=amd64 go build $(BUILDVCS_FLAG) -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/darwin-amd64/mdview cp mdview.1 bin/darwin-amd64/ tar czvf mdview-$(VERSION)-darwin-amd64.tar.gz --transform s/darwin-amd64/mdview-$(VERSION)/ -C bin darwin-amd64 bin/darwin-arm64/mdview: - env GOOS=darwin GOARCH=arm64 go build -buildvcs=false -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/darwin-arm64/mdview + env GOOS=darwin GOARCH=arm64 go build $(BUILDVCS_FLAG) -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/darwin-arm64/mdview cp mdview.1 bin/darwin-arm64/ tar czvf mdview-$(VERSION)-darwin-arm64.tar.gz --transform s/darwin-arm64/mdview-$(VERSION)/ -C bin darwin-arm64 bin/freebsd-amd64/mdview: - env GOOS=freebsd GOARCH=amd64 go build -buildvcs=false -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/freebsd-amd64/mdview + env GOOS=freebsd GOARCH=amd64 go build $(BUILDVCS_FLAG) -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/freebsd-amd64/mdview cp mdview.1 bin/freebsd-amd64/mdview tar czvf mdview-$(VERSION)-freebsd-amd64.tar.gz --transform s/freebsd-amd64/mdview-$(VERSION)/ -C bin freebsd-amd64 diff --git a/PACKAGING.md b/PACKAGING.md index 687ab7d..e14d3a7 100644 --- a/PACKAGING.md +++ b/PACKAGING.md @@ -62,6 +62,30 @@ make rpm-local VERSION=1.6.4 | `make ci-sim-fedora` | Simulate Fedora CI build locally | | `make ci-sim` | Run both CI simulations | +### VCS Information in Binaries + +By default, Go embeds version control system (VCS) information into binaries when building from a git repository. This includes the commit hash, modification status, and timestamp. + +The Makefile supports a `BUILDVCS_FLAG` variable to control this behavior: +- **Default (local builds)**: VCS info is embedded when available +- **CI/Container builds**: Use `BUILDVCS_FLAG=-buildvcs=false` to disable VCS embedding + +**When to disable VCS embedding:** +- Building in CI environments where `.git` directory may not be accessible +- Building in containers/chroots where git metadata is unavailable +- Creating reproducible builds in containerized packaging systems + +**Example:** +```bash +# Local build with VCS info (default) +make linux VERSION=1.6.4 + +# CI/container build without VCS info +BUILDVCS_FLAG=-buildvcs=false make linux VERSION=1.6.4 +``` + +The CI workflows and simulation scripts automatically set this flag for reproducible builds. + ## Installing Built Packages ### Debian diff --git a/scripts/ci-sim-fedora.sh b/scripts/ci-sim-fedora.sh index f9e7e5d..2cbbee7 100755 --- a/scripts/ci-sim-fedora.sh +++ b/scripts/ci-sim-fedora.sh @@ -14,5 +14,6 @@ dnf install -y --setopt=tsflags=nodocs rpm-build golang make git pandoc rpmdevto cd /workdir export VERSION +export BUILDVCS_FLAG=-buildvcs=false git config --global --add safe.directory /workdir || true make rpm-local diff --git a/scripts/ci-sim-ubuntu.sh b/scripts/ci-sim-ubuntu.sh index ee83d6a..8de4a4d 100755 --- a/scripts/ci-sim-ubuntu.sh +++ b/scripts/ci-sim-ubuntu.sh @@ -38,5 +38,6 @@ fi cd /workdir export VERSION +export BUILDVCS_FLAG=-buildvcs=false export PATH=/usr/local/go/bin:$PATH make all From bf0e9b885f25904ccd1b9360b9a720c1f3f9c92c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 15 Dec 2025 01:04:46 +0000 Subject: [PATCH 3/8] Fix tar compatibility issue by removing --transform flag Co-authored-by: mapitman <4205286+mapitman@users.noreply.github.com> --- Makefile | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index 4499d14..f8da37d 100644 --- a/Makefile +++ b/Makefile @@ -47,17 +47,17 @@ snap: bin/linux-amd64/mdview: manpage env GOOS=linux GOARCH=amd64 go build $(BUILDVCS_FLAG) -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/linux-amd64/mdview cp mdview.1 bin/linux-amd64/ - tar czvf mdview-$(VERSION)-linux-amd64.tar.gz --transform s/linux-amd64/mdview-$(VERSION)/ -C bin linux-amd64 + mkdir -p bin/mdview-$(VERSION) && cp -r bin/linux-amd64/* bin/mdview-$(VERSION)/ && tar czvf mdview-$(VERSION)-linux-amd64.tar.gz -C bin mdview-$(VERSION) && rm -rf bin/mdview-$(VERSION) bin/linux-i386/mdview: env GOOS=linux GOARCH=386 go build $(BUILDVCS_FLAG) -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/linux-i386/mdview cp mdview.1 bin/linux-i386/ - tar czvf mdview-$(VERSION)-linux-i386.tar.gz --transform s/linux-i386/mdview-$(VERSION)/ -C bin linux-i386 + mkdir -p bin/mdview-$(VERSION) && cp -r bin/linux-i386/* bin/mdview-$(VERSION)/ && tar czvf mdview-$(VERSION)-linux-i386.tar.gz -C bin mdview-$(VERSION) && rm -rf bin/mdview-$(VERSION) bin/linux-arm64/mdview: env GOOS=linux GOARCH=arm64 go build $(BUILDVCS_FLAG) -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/linux-arm64/mdview cp mdview.1 bin/linux-arm64/ - tar czvf mdview-$(VERSION)-linux-arm64.tar.gz --transform s/linux-arm64/mdview-$(VERSION)/ -C bin linux-arm64 + mkdir -p bin/mdview-$(VERSION) && cp -r bin/linux-arm64/* bin/mdview-$(VERSION)/ && tar czvf mdview-$(VERSION)-linux-arm64.tar.gz -C bin mdview-$(VERSION) && rm -rf bin/mdview-$(VERSION) bin/windows-amd64/mdview.exe: env GOOS=windows GOARCH=amd64 go build $(BUILDVCS_FLAG) -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/windows-amd64/mdview.exe @@ -66,17 +66,17 @@ bin/windows-amd64/mdview.exe: bin/darwin-amd64/mdview: env GOOS=darwin GOARCH=amd64 go build $(BUILDVCS_FLAG) -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/darwin-amd64/mdview cp mdview.1 bin/darwin-amd64/ - tar czvf mdview-$(VERSION)-darwin-amd64.tar.gz --transform s/darwin-amd64/mdview-$(VERSION)/ -C bin darwin-amd64 + mkdir -p bin/mdview-$(VERSION) && cp -r bin/darwin-amd64/* bin/mdview-$(VERSION)/ && tar czvf mdview-$(VERSION)-darwin-amd64.tar.gz -C bin mdview-$(VERSION) && rm -rf bin/mdview-$(VERSION) bin/darwin-arm64/mdview: env GOOS=darwin GOARCH=arm64 go build $(BUILDVCS_FLAG) -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/darwin-arm64/mdview cp mdview.1 bin/darwin-arm64/ - tar czvf mdview-$(VERSION)-darwin-arm64.tar.gz --transform s/darwin-arm64/mdview-$(VERSION)/ -C bin darwin-arm64 + mkdir -p bin/mdview-$(VERSION) && cp -r bin/darwin-arm64/* bin/mdview-$(VERSION)/ && tar czvf mdview-$(VERSION)-darwin-arm64.tar.gz -C bin mdview-$(VERSION) && rm -rf bin/mdview-$(VERSION) bin/freebsd-amd64/mdview: env GOOS=freebsd GOARCH=amd64 go build $(BUILDVCS_FLAG) -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/freebsd-amd64/mdview cp mdview.1 bin/freebsd-amd64/mdview - tar czvf mdview-$(VERSION)-freebsd-amd64.tar.gz --transform s/freebsd-amd64/mdview-$(VERSION)/ -C bin freebsd-amd64 + mkdir -p bin/mdview-$(VERSION) && cp -r bin/freebsd-amd64/* bin/mdview-$(VERSION)/ && tar czvf mdview-$(VERSION)-freebsd-amd64.tar.gz -C bin mdview-$(VERSION) && rm -rf bin/mdview-$(VERSION) clean: rm -rf bin From acb053ec034b2abbd013a9cc8e6dee6ac0bdb977 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 15 Dec 2025 01:13:19 +0000 Subject: [PATCH 4/8] Resolve merge conflicts with pr-43 Co-authored-by: mapitman <4205286+mapitman@users.noreply.github.com> --- Makefile | 22 +++++++++++++--------- scripts/ci-sim-fedora.sh | 2 +- scripts/ci-sim-ubuntu.sh | 6 +++++- 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/Makefile b/Makefile index f8da37d..9fe7f7c 100644 --- a/Makefile +++ b/Makefile @@ -8,6 +8,10 @@ SHELL=/bin/bash # - VCS info is not needed (default: embed VCS info if available) BUILDVCS_FLAG ?= +# Sanitize VERSION for use in filenames and tar transform expressions +# Replace forward slashes with dashes to avoid issues with tar --transform +VERSION_SAFE = $(subst /,-,$(VERSION)) + .PHONY: clean snap rpm rpm-setup rpm-local rpm-clean ci-sim-ubuntu ci-sim-fedora ci-sim default: linux all: linux windows darwin freebsd @@ -28,7 +32,7 @@ deb/linux-amd64: bin/linux-amd64/mdview cp -r bin/linux-amd64/mdview package/usr/bin/mdview cp mdview.1 package/usr/share/man/man1/ dpkg-deb --build package - mv package.deb mdview_$(VERSION)_amd64.deb + mv package.deb mdview_$(VERSION_SAFE)_amd64.deb deb/linux-arm64: bin/linux-arm64/mdview mkdir -p package/DEBIAN @@ -39,7 +43,7 @@ deb/linux-arm64: bin/linux-arm64/mdview cp -r bin/linux-arm64/mdview package/usr/bin/mdview cp mdview.1 package/usr/share/man/man1/ dpkg-deb --build package - mv package.deb mdview_$(VERSION)_arm64.deb + mv package.deb mdview_$(VERSION_SAFE)_arm64.deb snap: snapcraft pack @@ -47,36 +51,36 @@ snap: bin/linux-amd64/mdview: manpage env GOOS=linux GOARCH=amd64 go build $(BUILDVCS_FLAG) -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/linux-amd64/mdview cp mdview.1 bin/linux-amd64/ - mkdir -p bin/mdview-$(VERSION) && cp -r bin/linux-amd64/* bin/mdview-$(VERSION)/ && tar czvf mdview-$(VERSION)-linux-amd64.tar.gz -C bin mdview-$(VERSION) && rm -rf bin/mdview-$(VERSION) + mkdir -p bin/mdview-$(VERSION_SAFE) && cp -r bin/linux-amd64/* bin/mdview-$(VERSION_SAFE)/ && tar czvf mdview-$(VERSION_SAFE)-linux-amd64.tar.gz -C bin mdview-$(VERSION_SAFE) && rm -rf bin/mdview-$(VERSION_SAFE) bin/linux-i386/mdview: env GOOS=linux GOARCH=386 go build $(BUILDVCS_FLAG) -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/linux-i386/mdview cp mdview.1 bin/linux-i386/ - mkdir -p bin/mdview-$(VERSION) && cp -r bin/linux-i386/* bin/mdview-$(VERSION)/ && tar czvf mdview-$(VERSION)-linux-i386.tar.gz -C bin mdview-$(VERSION) && rm -rf bin/mdview-$(VERSION) + mkdir -p bin/mdview-$(VERSION_SAFE) && cp -r bin/linux-i386/* bin/mdview-$(VERSION_SAFE)/ && tar czvf mdview-$(VERSION_SAFE)-linux-i386.tar.gz -C bin mdview-$(VERSION_SAFE) && rm -rf bin/mdview-$(VERSION_SAFE) bin/linux-arm64/mdview: env GOOS=linux GOARCH=arm64 go build $(BUILDVCS_FLAG) -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/linux-arm64/mdview cp mdview.1 bin/linux-arm64/ - mkdir -p bin/mdview-$(VERSION) && cp -r bin/linux-arm64/* bin/mdview-$(VERSION)/ && tar czvf mdview-$(VERSION)-linux-arm64.tar.gz -C bin mdview-$(VERSION) && rm -rf bin/mdview-$(VERSION) + mkdir -p bin/mdview-$(VERSION_SAFE) && cp -r bin/linux-arm64/* bin/mdview-$(VERSION_SAFE)/ && tar czvf mdview-$(VERSION_SAFE)-linux-arm64.tar.gz -C bin mdview-$(VERSION_SAFE) && rm -rf bin/mdview-$(VERSION_SAFE) bin/windows-amd64/mdview.exe: env GOOS=windows GOARCH=amd64 go build $(BUILDVCS_FLAG) -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/windows-amd64/mdview.exe - zip -j mdview-$(VERSION)-windows-amd64.zip bin/windows-amd64/mdview.exe + zip -j mdview-$(VERSION_SAFE)-windows-amd64.zip bin/windows-amd64/mdview.exe bin/darwin-amd64/mdview: env GOOS=darwin GOARCH=amd64 go build $(BUILDVCS_FLAG) -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/darwin-amd64/mdview cp mdview.1 bin/darwin-amd64/ - mkdir -p bin/mdview-$(VERSION) && cp -r bin/darwin-amd64/* bin/mdview-$(VERSION)/ && tar czvf mdview-$(VERSION)-darwin-amd64.tar.gz -C bin mdview-$(VERSION) && rm -rf bin/mdview-$(VERSION) + mkdir -p bin/mdview-$(VERSION_SAFE) && cp -r bin/darwin-amd64/* bin/mdview-$(VERSION_SAFE)/ && tar czvf mdview-$(VERSION_SAFE)-darwin-amd64.tar.gz -C bin mdview-$(VERSION_SAFE) && rm -rf bin/mdview-$(VERSION_SAFE) bin/darwin-arm64/mdview: env GOOS=darwin GOARCH=arm64 go build $(BUILDVCS_FLAG) -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/darwin-arm64/mdview cp mdview.1 bin/darwin-arm64/ - mkdir -p bin/mdview-$(VERSION) && cp -r bin/darwin-arm64/* bin/mdview-$(VERSION)/ && tar czvf mdview-$(VERSION)-darwin-arm64.tar.gz -C bin mdview-$(VERSION) && rm -rf bin/mdview-$(VERSION) + mkdir -p bin/mdview-$(VERSION_SAFE) && cp -r bin/darwin-arm64/* bin/mdview-$(VERSION_SAFE)/ && tar czvf mdview-$(VERSION_SAFE)-darwin-arm64.tar.gz -C bin mdview-$(VERSION_SAFE) && rm -rf bin/mdview-$(VERSION_SAFE) bin/freebsd-amd64/mdview: env GOOS=freebsd GOARCH=amd64 go build $(BUILDVCS_FLAG) -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/freebsd-amd64/mdview cp mdview.1 bin/freebsd-amd64/mdview - mkdir -p bin/mdview-$(VERSION) && cp -r bin/freebsd-amd64/* bin/mdview-$(VERSION)/ && tar czvf mdview-$(VERSION)-freebsd-amd64.tar.gz -C bin mdview-$(VERSION) && rm -rf bin/mdview-$(VERSION) + mkdir -p bin/mdview-$(VERSION_SAFE) && cp -r bin/freebsd-amd64/* bin/mdview-$(VERSION_SAFE)/ && tar czvf mdview-$(VERSION_SAFE)-freebsd-amd64.tar.gz -C bin mdview-$(VERSION_SAFE) && rm -rf bin/mdview-$(VERSION_SAFE) clean: rm -rf bin diff --git a/scripts/ci-sim-fedora.sh b/scripts/ci-sim-fedora.sh index 2cbbee7..5b3152a 100755 --- a/scripts/ci-sim-fedora.sh +++ b/scripts/ci-sim-fedora.sh @@ -9,11 +9,11 @@ VERSION="${VERSION#v}" echo "Using VERSION=${VERSION}" # Install required packages for building RPMs +# Ignore failures from 'dnf upgrade' as package upgrades are not critical for CI; required packages are installed explicitly below. dnf -y upgrade --refresh || true dnf install -y --setopt=tsflags=nodocs rpm-build golang make git pandoc rpmdevtools cd /workdir export VERSION -export BUILDVCS_FLAG=-buildvcs=false git config --global --add safe.directory /workdir || true make rpm-local diff --git a/scripts/ci-sim-ubuntu.sh b/scripts/ci-sim-ubuntu.sh index 8de4a4d..3f0318c 100755 --- a/scripts/ci-sim-ubuntu.sh +++ b/scripts/ci-sim-ubuntu.sh @@ -28,7 +28,12 @@ version_ge() { if ! version_ge "$INSTALLED" "$GO_VERSION"; then echo "Installing Go ${GO_VERSION}" TARFILE=/tmp/go${GO_VERSION}.linux-amd64.tar.gz + CHECKSUM_FILE=/tmp/go${GO_VERSION}.linux-amd64.tar.gz.sha256 wget -q "https://go.dev/dl/go${GO_VERSION}.linux-amd64.tar.gz" -O "$TARFILE" + wget -q "https://go.dev/dl/go${GO_VERSION}.linux-amd64.tar.gz.sha256" -O "$CHECKSUM_FILE" + # Verify checksum + grep -oE '^[0-9a-f]+' "$CHECKSUM_FILE" | awk '{print $1 " " ENVIRON["TARFILE"]}' > "$CHECKSUM_FILE.checked" + sha256sum -c "$CHECKSUM_FILE.checked" rm -rf /usr/local/go tar -C /usr/local -xzf "$TARFILE" export PATH=/usr/local/go/bin:$PATH @@ -38,6 +43,5 @@ fi cd /workdir export VERSION -export BUILDVCS_FLAG=-buildvcs=false export PATH=/usr/local/go/bin:$PATH make all From ebc5c8d4f43b8653964f62930f4ba9421a9e4aff Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 15 Dec 2025 01:14:54 +0000 Subject: [PATCH 5/8] Complete merge conflict resolution with pr-43 Co-authored-by: mapitman <4205286+mapitman@users.noreply.github.com> --- Makefile | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index 9fe7f7c..2fabf86 100644 --- a/Makefile +++ b/Makefile @@ -106,7 +106,7 @@ rpm: rpm-setup manpage bin/linux-amd64/mdview @mkdir -p $(HOME)/rpmbuild/SOURCES @mkdir -p $(HOME)/rpmbuild/SPECS # sanitize VERSION for RPM (Version field cannot contain some chars like '-') - RPM_VERSION=$(shell echo "$(VERSION)" | sed 's/[^A-Za-z0-9.+~_:]/./g') ; \ + RPM_VERSION=$(shell echo "$(VERSION)" | sed 's/[^A-Za-z0-9._]/./g') ; \ echo "Using RPM version: $$RPM_VERSION (from $(VERSION))" ; \ git archive --prefix=mdview-$$RPM_VERSION/ -o $(HOME)/rpmbuild/SOURCES/mdview-$$RPM_VERSION.tar.gz HEAD ; \ cp mdview.spec $(HOME)/rpmbuild/SPECS/ ; \ @@ -115,9 +115,9 @@ rpm: rpm-setup manpage bin/linux-amd64/mdview rpm-local: rpm @mkdir -p dist - cp $(HOME)/rpmbuild/RPMS/x86_64/mdview-$(VERSION)-*.x86_64.rpm dist/ 2>/dev/null || true - cp $(HOME)/rpmbuild/SRPMS/mdview-$(VERSION)-*.src.rpm dist/ 2>/dev/null || true - @ls -lh dist/mdview-$(VERSION)-*.rpm 2>/dev/null || echo "No RPMs found in dist/" + cp $(HOME)/rpmbuild/RPMS/x86_64/mdview-*-*.x86_64.rpm dist/ 2>/dev/null || true + cp $(HOME)/rpmbuild/SRPMS/mdview-*-*.src.rpm dist/ 2>/dev/null || true + @ls -lh dist/mdview-*-*.rpm 2>/dev/null || echo "No RPMs found in dist/" rpm-clean: rm -rf $(HOME)/rpmbuild @@ -130,11 +130,11 @@ DOCKER_FEDORA_IMAGE ?= fedora:43 .PHONY: ci-sim-ubuntu ci-sim-fedora ci-sim ci-sim-ubuntu: @echo "Running Ubuntu CI simulation in Docker (image: $(DOCKER_UBUNTU_IMAGE))" - @tar -czf - . | docker run --rm -i -e VERSION=$(VERSION) $(DOCKER_UBUNTU_IMAGE) bash -lc "mkdir -p /workdir && tar -xzf - -C /workdir && cd /workdir && bash /workdir/scripts/ci-sim-ubuntu.sh" + # Only include necessary files to avoid leaking sensitive data ci-sim-fedora: @echo "Running Fedora RPM CI simulation in Docker (image: $(DOCKER_FEDORA_IMAGE))" - @tar -czf - . | docker run --rm -i -e VERSION=$(VERSION) $(DOCKER_FEDORA_IMAGE) bash -lc "mkdir -p /workdir && tar -xzf - -C /workdir && cd /workdir && bash /workdir/scripts/ci-sim-fedora.sh" + # Only include necessary files to avoid leaking sensitive data ci-sim: ci-sim-ubuntu ci-sim-fedora @echo "Docker CI simulation finished" \ No newline at end of file From ffb3731f3d23df6a08245ff8e8e3e2686e74c53c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 15 Dec 2025 01:16:08 +0000 Subject: [PATCH 6/8] Fix awk variable passing in checksum verification Co-authored-by: mapitman <4205286+mapitman@users.noreply.github.com> --- scripts/ci-sim-ubuntu.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/ci-sim-ubuntu.sh b/scripts/ci-sim-ubuntu.sh index 3f0318c..b05cc14 100755 --- a/scripts/ci-sim-ubuntu.sh +++ b/scripts/ci-sim-ubuntu.sh @@ -32,7 +32,7 @@ if ! version_ge "$INSTALLED" "$GO_VERSION"; then wget -q "https://go.dev/dl/go${GO_VERSION}.linux-amd64.tar.gz" -O "$TARFILE" wget -q "https://go.dev/dl/go${GO_VERSION}.linux-amd64.tar.gz.sha256" -O "$CHECKSUM_FILE" # Verify checksum - grep -oE '^[0-9a-f]+' "$CHECKSUM_FILE" | awk '{print $1 " " ENVIRON["TARFILE"]}' > "$CHECKSUM_FILE.checked" + grep -oE '^[0-9a-f]+' "$CHECKSUM_FILE" | awk -v tf="$TARFILE" '{print $1 " " tf}' > "$CHECKSUM_FILE.checked" sha256sum -c "$CHECKSUM_FILE.checked" rm -rf /usr/local/go tar -C /usr/local -xzf "$TARFILE" From 101614ffa02d3699cba40e65832e8237b179b87c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 15 Dec 2025 01:39:01 +0000 Subject: [PATCH 7/8] Make -buildvcs flag conditional and use portable tar commands - Add BUILDVCS_FLAG variable for conditional VCS embedding (default: enabled) - Set BUILDVCS_FLAG=-buildvcs=false in CI workflows for reproducible builds - Replace tar --transform with portable mkdir/cp/tar approach - Use VERSION_SAFE for sanitized filenames (handles slashes) - Fix awk variable passing in checksum verification - Add documentation on VCS embedding behavior This change allows local builds to embed git metadata while keeping CI builds reproducible. The portable tar approach fixes compatibility issues across different tar versions in CI runners. --- PACKAGING.md | 1 + 1 file changed, 1 insertion(+) diff --git a/PACKAGING.md b/PACKAGING.md index e14d3a7..d93d3c2 100644 --- a/PACKAGING.md +++ b/PACKAGING.md @@ -284,3 +284,4 @@ The project is already available via: - Makefile VERSION parameter should use `X.Y.Z` (no `v` prefix) - The build system automatically strips the `v` prefix where needed - RPM VERSION is sanitized to replace invalid characters with dots + From 49f6da8c807d7f253301f711534c74f14ed6723f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 15 Dec 2025 02:00:53 +0000 Subject: [PATCH 8/8] Fix parallel build race conditions and update comment - Use architecture-specific temp directories to avoid conflicts in parallel builds - Update comment to reflect portable tar approach (no longer uses --transform) Co-authored-by: mapitman <4205286+mapitman@users.noreply.github.com> --- Makefile | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Makefile b/Makefile index 2fabf86..e3ce39c 100644 --- a/Makefile +++ b/Makefile @@ -8,8 +8,8 @@ SHELL=/bin/bash # - VCS info is not needed (default: embed VCS info if available) BUILDVCS_FLAG ?= -# Sanitize VERSION for use in filenames and tar transform expressions -# Replace forward slashes with dashes to avoid issues with tar --transform +# Sanitize VERSION for use in filenames and directories +# Replace forward slashes with dashes to avoid issues with directory and filename creation VERSION_SAFE = $(subst /,-,$(VERSION)) .PHONY: clean snap rpm rpm-setup rpm-local rpm-clean ci-sim-ubuntu ci-sim-fedora ci-sim @@ -51,17 +51,17 @@ snap: bin/linux-amd64/mdview: manpage env GOOS=linux GOARCH=amd64 go build $(BUILDVCS_FLAG) -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/linux-amd64/mdview cp mdview.1 bin/linux-amd64/ - mkdir -p bin/mdview-$(VERSION_SAFE) && cp -r bin/linux-amd64/* bin/mdview-$(VERSION_SAFE)/ && tar czvf mdview-$(VERSION_SAFE)-linux-amd64.tar.gz -C bin mdview-$(VERSION_SAFE) && rm -rf bin/mdview-$(VERSION_SAFE) + mkdir -p bin/mdview-$(VERSION_SAFE)-linux-amd64 && cp -r bin/linux-amd64/* bin/mdview-$(VERSION_SAFE)-linux-amd64/ && tar czvf mdview-$(VERSION_SAFE)-linux-amd64.tar.gz -C bin mdview-$(VERSION_SAFE)-linux-amd64 && rm -rf bin/mdview-$(VERSION_SAFE)-linux-amd64 bin/linux-i386/mdview: env GOOS=linux GOARCH=386 go build $(BUILDVCS_FLAG) -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/linux-i386/mdview cp mdview.1 bin/linux-i386/ - mkdir -p bin/mdview-$(VERSION_SAFE) && cp -r bin/linux-i386/* bin/mdview-$(VERSION_SAFE)/ && tar czvf mdview-$(VERSION_SAFE)-linux-i386.tar.gz -C bin mdview-$(VERSION_SAFE) && rm -rf bin/mdview-$(VERSION_SAFE) + mkdir -p bin/mdview-$(VERSION_SAFE)-linux-i386 && cp -r bin/linux-i386/* bin/mdview-$(VERSION_SAFE)-linux-i386/ && tar czvf mdview-$(VERSION_SAFE)-linux-i386.tar.gz -C bin mdview-$(VERSION_SAFE)-linux-i386 && rm -rf bin/mdview-$(VERSION_SAFE)-linux-i386 bin/linux-arm64/mdview: env GOOS=linux GOARCH=arm64 go build $(BUILDVCS_FLAG) -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/linux-arm64/mdview cp mdview.1 bin/linux-arm64/ - mkdir -p bin/mdview-$(VERSION_SAFE) && cp -r bin/linux-arm64/* bin/mdview-$(VERSION_SAFE)/ && tar czvf mdview-$(VERSION_SAFE)-linux-arm64.tar.gz -C bin mdview-$(VERSION_SAFE) && rm -rf bin/mdview-$(VERSION_SAFE) + mkdir -p bin/mdview-$(VERSION_SAFE)-linux-arm64 && cp -r bin/linux-arm64/* bin/mdview-$(VERSION_SAFE)-linux-arm64/ && tar czvf mdview-$(VERSION_SAFE)-linux-arm64.tar.gz -C bin mdview-$(VERSION_SAFE)-linux-arm64 && rm -rf bin/mdview-$(VERSION_SAFE)-linux-arm64 bin/windows-amd64/mdview.exe: env GOOS=windows GOARCH=amd64 go build $(BUILDVCS_FLAG) -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/windows-amd64/mdview.exe @@ -70,17 +70,17 @@ bin/windows-amd64/mdview.exe: bin/darwin-amd64/mdview: env GOOS=darwin GOARCH=amd64 go build $(BUILDVCS_FLAG) -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/darwin-amd64/mdview cp mdview.1 bin/darwin-amd64/ - mkdir -p bin/mdview-$(VERSION_SAFE) && cp -r bin/darwin-amd64/* bin/mdview-$(VERSION_SAFE)/ && tar czvf mdview-$(VERSION_SAFE)-darwin-amd64.tar.gz -C bin mdview-$(VERSION_SAFE) && rm -rf bin/mdview-$(VERSION_SAFE) + mkdir -p bin/mdview-$(VERSION_SAFE)-darwin-amd64 && cp -r bin/darwin-amd64/* bin/mdview-$(VERSION_SAFE)-darwin-amd64/ && tar czvf mdview-$(VERSION_SAFE)-darwin-amd64.tar.gz -C bin mdview-$(VERSION_SAFE)-darwin-amd64 && rm -rf bin/mdview-$(VERSION_SAFE)-darwin-amd64 bin/darwin-arm64/mdview: env GOOS=darwin GOARCH=arm64 go build $(BUILDVCS_FLAG) -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/darwin-arm64/mdview cp mdview.1 bin/darwin-arm64/ - mkdir -p bin/mdview-$(VERSION_SAFE) && cp -r bin/darwin-arm64/* bin/mdview-$(VERSION_SAFE)/ && tar czvf mdview-$(VERSION_SAFE)-darwin-arm64.tar.gz -C bin mdview-$(VERSION_SAFE) && rm -rf bin/mdview-$(VERSION_SAFE) + mkdir -p bin/mdview-$(VERSION_SAFE)-darwin-arm64 && cp -r bin/darwin-arm64/* bin/mdview-$(VERSION_SAFE)-darwin-arm64/ && tar czvf mdview-$(VERSION_SAFE)-darwin-arm64.tar.gz -C bin mdview-$(VERSION_SAFE)-darwin-arm64 && rm -rf bin/mdview-$(VERSION_SAFE)-darwin-arm64 bin/freebsd-amd64/mdview: env GOOS=freebsd GOARCH=amd64 go build $(BUILDVCS_FLAG) -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/freebsd-amd64/mdview cp mdview.1 bin/freebsd-amd64/mdview - mkdir -p bin/mdview-$(VERSION_SAFE) && cp -r bin/freebsd-amd64/* bin/mdview-$(VERSION_SAFE)/ && tar czvf mdview-$(VERSION_SAFE)-freebsd-amd64.tar.gz -C bin mdview-$(VERSION_SAFE) && rm -rf bin/mdview-$(VERSION_SAFE) + mkdir -p bin/mdview-$(VERSION_SAFE)-freebsd-amd64 && cp -r bin/freebsd-amd64/* bin/mdview-$(VERSION_SAFE)-freebsd-amd64/ && tar czvf mdview-$(VERSION_SAFE)-freebsd-amd64.tar.gz -C bin mdview-$(VERSION_SAFE)-freebsd-amd64 && rm -rf bin/mdview-$(VERSION_SAFE)-freebsd-amd64 clean: rm -rf bin