mirror of
https://github.com/3proxy/3proxy.git
synced 2026-08-26 09:55:48 +08:00
Derive all build timestamps from BUILDDATE
The build date stored in version.h is now the single time source for a release. Each package workflow converts it to SOURCE_DATE_EPOCH and passes that into the build containers, the debian changelog entry is stamped from it rather than from the build clock, and rpmbuild is told to use it as the build time and to clamp file mtimes to it. rpm also records the build host, which is a container id and therefore differs on every run, so pin it as well - otherwise the timestamps alone do not make the package reproducible. Rebuilding the same commit now produces byte identical packages, verified for both formats by building twice and comparing checksums. In the version workflow the clock is read exactly once, when a new build date is minted. YEAR3PROXY is derived from the build date instead of being read separately, so the two cannot straddle a year boundary and a re-run in a later year no longer rewrites version.h.
This commit is contained in:
parent
ff77d222e4
commit
754ba7115a
14
.github/workflows/build-rpm-arm64.yml
vendored
14
.github/workflows/build-rpm-arm64.yml
vendored
@ -27,8 +27,10 @@ jobs:
|
|||||||
pwd
|
pwd
|
||||||
echo "RELEASE=$(cat RELEASE)" >> $GITHUB_ENV
|
echo "RELEASE=$(cat RELEASE)" >> $GITHUB_ENV
|
||||||
BUILDDATE=$(sed -n 's/^#define BUILDDATE "\(.*\)"$/\1/p' src/version.h)
|
BUILDDATE=$(sed -n 's/^#define BUILDDATE "\(.*\)"$/\1/p' src/version.h)
|
||||||
[ -n "$BUILDDATE" ] || BUILDDATE=$(date +%y%m%d%H%M%S)
|
[ -n "$BUILDDATE" ] || BUILDDATE=$(date -u +%y%m%d%H%M%S)
|
||||||
echo "VERSION=$BUILDDATE" >> $GITHUB_ENV
|
echo "VERSION=$BUILDDATE" >> $GITHUB_ENV
|
||||||
|
SOURCE_DATE_EPOCH=$(date -u -d "20${BUILDDATE:0:2}-${BUILDDATE:2:2}-${BUILDDATE:4:2} ${BUILDDATE:6:2}:${BUILDDATE:8:2}:${BUILDDATE:10:2}" +%s)
|
||||||
|
echo "SOURCE_DATE_EPOCH=$SOURCE_DATE_EPOCH" >> $GITHUB_ENV
|
||||||
- name: echo env
|
- name: echo env
|
||||||
run: echo "release $RELEASE version $VERSION"
|
run: echo "release $RELEASE version $VERSION"
|
||||||
- name: Linux libraries
|
- name: Linux libraries
|
||||||
@ -52,6 +54,7 @@ jobs:
|
|||||||
-v "$PWD/scripts/rh/3proxy.spec:/3proxy.spec:ro" \
|
-v "$PWD/scripts/rh/3proxy.spec:/3proxy.spec:ro" \
|
||||||
-v "$PWD/rpmout:/out" \
|
-v "$PWD/rpmout:/out" \
|
||||||
-e RELEASE="$RELEASE" -e HOSTUID="$(id -u)" -e HOSTGID="$(id -g)" \
|
-e RELEASE="$RELEASE" -e HOSTUID="$(id -u)" -e HOSTGID="$(id -g)" \
|
||||||
|
-e SOURCE_DATE_EPOCH="$SOURCE_DATE_EPOCH" \
|
||||||
"almalinux:$EL" bash -c '
|
"almalinux:$EL" bash -c '
|
||||||
set -e
|
set -e
|
||||||
dnf -y install rpm-build gcc make openssl-devel pcre2-devel pam-devel tar gzip
|
dnf -y install rpm-build gcc make openssl-devel pcre2-devel pam-devel tar gzip
|
||||||
@ -60,7 +63,11 @@ jobs:
|
|||||||
ln -sf ~/rpmbuild/SOURCES/3proxy-$RELEASE.tar.gz ~/rpmbuild/SOURCES/$RELEASE.tar.gz
|
ln -sf ~/rpmbuild/SOURCES/3proxy-$RELEASE.tar.gz ~/rpmbuild/SOURCES/$RELEASE.tar.gz
|
||||||
cp /3proxy.spec ~/rpmbuild/SPECS/3proxy-$RELEASE.spec
|
cp /3proxy.spec ~/rpmbuild/SPECS/3proxy-$RELEASE.spec
|
||||||
cd ~/rpmbuild/SPECS
|
cd ~/rpmbuild/SPECS
|
||||||
rpmbuild -ba 3proxy-$RELEASE.spec
|
rpmbuild -ba \
|
||||||
|
--define "use_source_date_epoch_as_buildtime 1" \
|
||||||
|
--define "clamp_mtime_to_source_date_epoch 1" \
|
||||||
|
--define "_buildhost 3proxy.org" \
|
||||||
|
3proxy-$RELEASE.spec
|
||||||
cp ~/rpmbuild/RPMS/*/*.rpm /out/
|
cp ~/rpmbuild/RPMS/*/*.rpm /out/
|
||||||
chown "$HOSTUID:$HOSTGID" /out/*.rpm || chmod 0666 /out/*.rpm'
|
chown "$HOSTUID:$HOSTGID" /out/*.rpm || chmod 0666 /out/*.rpm'
|
||||||
done
|
done
|
||||||
@ -81,6 +88,7 @@ jobs:
|
|||||||
docker run --rm \
|
docker run --rm \
|
||||||
-v "$HOME/debian:/debian" \
|
-v "$HOME/debian:/debian" \
|
||||||
-e RELEASE="$RELEASE" -e VERSION="$VERSION" \
|
-e RELEASE="$RELEASE" -e VERSION="$VERSION" \
|
||||||
|
-e SOURCE_DATE_EPOCH="$SOURCE_DATE_EPOCH" \
|
||||||
ubuntu:22.04 bash -c '
|
ubuntu:22.04 bash -c '
|
||||||
set -e
|
set -e
|
||||||
export DEBIAN_FRONTEND=noninteractive
|
export DEBIAN_FRONTEND=noninteractive
|
||||||
@ -93,7 +101,7 @@ jobs:
|
|||||||
echo " "
|
echo " "
|
||||||
echo " *3proxy $RELEASE build"
|
echo " *3proxy $RELEASE build"
|
||||||
echo " "
|
echo " "
|
||||||
echo " -- z3APA3A <3apa3a@3proxy.org> $(date "+%a, %d %b %Y %H:%M:%S %z")"
|
echo " -- z3APA3A <3apa3a@3proxy.org> $(date -R -u -d @$SOURCE_DATE_EPOCH)"
|
||||||
echo ""
|
echo ""
|
||||||
} > debian/changelog
|
} > debian/changelog
|
||||||
dpkg-buildpackage'
|
dpkg-buildpackage'
|
||||||
|
|||||||
7
.github/workflows/build-rpm-armhf.yml
vendored
7
.github/workflows/build-rpm-armhf.yml
vendored
@ -27,8 +27,10 @@ jobs:
|
|||||||
pwd
|
pwd
|
||||||
echo "RELEASE=$(cat RELEASE)" >> $GITHUB_ENV
|
echo "RELEASE=$(cat RELEASE)" >> $GITHUB_ENV
|
||||||
BUILDDATE=$(sed -n 's/^#define BUILDDATE "\(.*\)"$/\1/p' src/version.h)
|
BUILDDATE=$(sed -n 's/^#define BUILDDATE "\(.*\)"$/\1/p' src/version.h)
|
||||||
[ -n "$BUILDDATE" ] || BUILDDATE=$(date +%y%m%d%H%M%S)
|
[ -n "$BUILDDATE" ] || BUILDDATE=$(date -u +%y%m%d%H%M%S)
|
||||||
echo "VERSION=$BUILDDATE" >> $GITHUB_ENV
|
echo "VERSION=$BUILDDATE" >> $GITHUB_ENV
|
||||||
|
SOURCE_DATE_EPOCH=$(date -u -d "20${BUILDDATE:0:2}-${BUILDDATE:2:2}-${BUILDDATE:4:2} ${BUILDDATE:6:2}:${BUILDDATE:8:2}:${BUILDDATE:10:2}" +%s)
|
||||||
|
echo "SOURCE_DATE_EPOCH=$SOURCE_DATE_EPOCH" >> $GITHUB_ENV
|
||||||
- name: configure deb env
|
- name: configure deb env
|
||||||
run: |
|
run: |
|
||||||
mkdir ~/debian
|
mkdir ~/debian
|
||||||
@ -42,6 +44,7 @@ jobs:
|
|||||||
docker run --rm \
|
docker run --rm \
|
||||||
-v "$HOME/debian:/debian" \
|
-v "$HOME/debian:/debian" \
|
||||||
-e RELEASE="$RELEASE" -e VERSION="$VERSION" \
|
-e RELEASE="$RELEASE" -e VERSION="$VERSION" \
|
||||||
|
-e SOURCE_DATE_EPOCH="$SOURCE_DATE_EPOCH" \
|
||||||
ubuntu:22.04 bash -c '
|
ubuntu:22.04 bash -c '
|
||||||
set -e
|
set -e
|
||||||
export DEBIAN_FRONTEND=noninteractive
|
export DEBIAN_FRONTEND=noninteractive
|
||||||
@ -60,7 +63,7 @@ jobs:
|
|||||||
echo " "
|
echo " "
|
||||||
echo " *3proxy $RELEASE build"
|
echo " *3proxy $RELEASE build"
|
||||||
echo " "
|
echo " "
|
||||||
echo " -- z3APA3A <3apa3a@3proxy.org> $(date "+%a, %d %b %Y %H:%M:%S %z")"
|
echo " -- z3APA3A <3apa3a@3proxy.org> $(date -R -u -d @$SOURCE_DATE_EPOCH)"
|
||||||
echo ""
|
echo ""
|
||||||
} > debian/changelog
|
} > debian/changelog
|
||||||
export PATH=/usr/arm-linux-gnueabihf/bin:$PATH
|
export PATH=/usr/arm-linux-gnueabihf/bin:$PATH
|
||||||
|
|||||||
14
.github/workflows/build-rpm-x86-64.yml
vendored
14
.github/workflows/build-rpm-x86-64.yml
vendored
@ -27,8 +27,10 @@ jobs:
|
|||||||
pwd
|
pwd
|
||||||
echo "RELEASE=$(cat RELEASE)" >> $GITHUB_ENV
|
echo "RELEASE=$(cat RELEASE)" >> $GITHUB_ENV
|
||||||
BUILDDATE=$(sed -n 's/^#define BUILDDATE "\(.*\)"$/\1/p' src/version.h)
|
BUILDDATE=$(sed -n 's/^#define BUILDDATE "\(.*\)"$/\1/p' src/version.h)
|
||||||
[ -n "$BUILDDATE" ] || BUILDDATE=$(date +%y%m%d%H%M%S)
|
[ -n "$BUILDDATE" ] || BUILDDATE=$(date -u +%y%m%d%H%M%S)
|
||||||
echo "VERSION=$BUILDDATE" >> $GITHUB_ENV
|
echo "VERSION=$BUILDDATE" >> $GITHUB_ENV
|
||||||
|
SOURCE_DATE_EPOCH=$(date -u -d "20${BUILDDATE:0:2}-${BUILDDATE:2:2}-${BUILDDATE:4:2} ${BUILDDATE:6:2}:${BUILDDATE:8:2}:${BUILDDATE:10:2}" +%s)
|
||||||
|
echo "SOURCE_DATE_EPOCH=$SOURCE_DATE_EPOCH" >> $GITHUB_ENV
|
||||||
- name: echo env
|
- name: echo env
|
||||||
run: echo "release $RELEASE version $VERSION"
|
run: echo "release $RELEASE version $VERSION"
|
||||||
- name: Linux libraries
|
- name: Linux libraries
|
||||||
@ -52,6 +54,7 @@ jobs:
|
|||||||
-v "$PWD/scripts/rh/3proxy.spec:/3proxy.spec:ro" \
|
-v "$PWD/scripts/rh/3proxy.spec:/3proxy.spec:ro" \
|
||||||
-v "$PWD/rpmout:/out" \
|
-v "$PWD/rpmout:/out" \
|
||||||
-e RELEASE="$RELEASE" -e HOSTUID="$(id -u)" -e HOSTGID="$(id -g)" \
|
-e RELEASE="$RELEASE" -e HOSTUID="$(id -u)" -e HOSTGID="$(id -g)" \
|
||||||
|
-e SOURCE_DATE_EPOCH="$SOURCE_DATE_EPOCH" \
|
||||||
"almalinux:$EL" bash -c '
|
"almalinux:$EL" bash -c '
|
||||||
set -e
|
set -e
|
||||||
dnf -y install rpm-build gcc make openssl-devel pcre2-devel pam-devel tar gzip
|
dnf -y install rpm-build gcc make openssl-devel pcre2-devel pam-devel tar gzip
|
||||||
@ -60,7 +63,11 @@ jobs:
|
|||||||
ln -sf ~/rpmbuild/SOURCES/3proxy-$RELEASE.tar.gz ~/rpmbuild/SOURCES/$RELEASE.tar.gz
|
ln -sf ~/rpmbuild/SOURCES/3proxy-$RELEASE.tar.gz ~/rpmbuild/SOURCES/$RELEASE.tar.gz
|
||||||
cp /3proxy.spec ~/rpmbuild/SPECS/3proxy-$RELEASE.spec
|
cp /3proxy.spec ~/rpmbuild/SPECS/3proxy-$RELEASE.spec
|
||||||
cd ~/rpmbuild/SPECS
|
cd ~/rpmbuild/SPECS
|
||||||
rpmbuild -ba 3proxy-$RELEASE.spec
|
rpmbuild -ba \
|
||||||
|
--define "use_source_date_epoch_as_buildtime 1" \
|
||||||
|
--define "clamp_mtime_to_source_date_epoch 1" \
|
||||||
|
--define "_buildhost 3proxy.org" \
|
||||||
|
3proxy-$RELEASE.spec
|
||||||
cp ~/rpmbuild/RPMS/*/*.rpm /out/
|
cp ~/rpmbuild/RPMS/*/*.rpm /out/
|
||||||
chown "$HOSTUID:$HOSTGID" /out/*.rpm || chmod 0666 /out/*.rpm'
|
chown "$HOSTUID:$HOSTGID" /out/*.rpm || chmod 0666 /out/*.rpm'
|
||||||
done
|
done
|
||||||
@ -81,6 +88,7 @@ jobs:
|
|||||||
docker run --rm \
|
docker run --rm \
|
||||||
-v "$HOME/debian:/debian" \
|
-v "$HOME/debian:/debian" \
|
||||||
-e RELEASE="$RELEASE" -e VERSION="$VERSION" \
|
-e RELEASE="$RELEASE" -e VERSION="$VERSION" \
|
||||||
|
-e SOURCE_DATE_EPOCH="$SOURCE_DATE_EPOCH" \
|
||||||
ubuntu:22.04 bash -c '
|
ubuntu:22.04 bash -c '
|
||||||
set -e
|
set -e
|
||||||
export DEBIAN_FRONTEND=noninteractive
|
export DEBIAN_FRONTEND=noninteractive
|
||||||
@ -93,7 +101,7 @@ jobs:
|
|||||||
echo " "
|
echo " "
|
||||||
echo " *3proxy $RELEASE build"
|
echo " *3proxy $RELEASE build"
|
||||||
echo " "
|
echo " "
|
||||||
echo " -- z3APA3A <3apa3a@3proxy.org> $(date "+%a, %d %b %Y %H:%M:%S %z")"
|
echo " -- z3APA3A <3apa3a@3proxy.org> $(date -R -u -d @$SOURCE_DATE_EPOCH)"
|
||||||
echo ""
|
echo ""
|
||||||
} > debian/changelog
|
} > debian/changelog
|
||||||
dpkg-buildpackage'
|
dpkg-buildpackage'
|
||||||
|
|||||||
7
.github/workflows/update-version.yml
vendored
7
.github/workflows/update-version.yml
vendored
@ -21,7 +21,6 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
RELEASE=$(tr -d ' \t\r\n' < RELEASE)
|
RELEASE=$(tr -d ' \t\r\n' < RELEASE)
|
||||||
if [ -z "$RELEASE" ]; then echo "RELEASE is empty"; exit 1; fi
|
if [ -z "$RELEASE" ]; then echo "RELEASE is empty"; exit 1; fi
|
||||||
YEAR=$(date +%Y)
|
|
||||||
MAJOR=$(echo "$RELEASE" | cut -d . -f 1)
|
MAJOR=$(echo "$RELEASE" | cut -d . -f 1)
|
||||||
SUBMAJOR=$(echo "$RELEASE" | cut -d . -f 2)
|
SUBMAJOR=$(echo "$RELEASE" | cut -d . -f 2)
|
||||||
MINOR=$(echo "$RELEASE" | cut -d . -f 3)
|
MINOR=$(echo "$RELEASE" | cut -d . -f 3)
|
||||||
@ -38,9 +37,11 @@ jobs:
|
|||||||
if [ "$OLDRELEASE" = "$RELEASE" ] && [ -n "$OLDBUILDDATE" ]; then
|
if [ "$OLDRELEASE" = "$RELEASE" ] && [ -n "$OLDBUILDDATE" ]; then
|
||||||
BUILDDATE="$OLDBUILDDATE"
|
BUILDDATE="$OLDBUILDDATE"
|
||||||
else
|
else
|
||||||
BUILDDATE=$(date +%y%m%d%H%M%S)
|
BUILDDATE=$(date -u +%y%m%d%H%M%S)
|
||||||
fi
|
fi
|
||||||
echo "release $RELEASE -> $MAJOR $SUBMAJOR $MINOR $SUBMINOR, build date $BUILDDATE"
|
echo "release $RELEASE -> $MAJOR $SUBMAJOR $MINOR $SUBMINOR, build date $BUILDDATE"
|
||||||
|
SOURCE_DATE_EPOCH=$(date -u -d "20${BUILDDATE:0:2}-${BUILDDATE:2:2}-${BUILDDATE:4:2} ${BUILDDATE:6:2}:${BUILDDATE:8:2}:${BUILDDATE:10:2}" +%s)
|
||||||
|
YEAR=$(date -u -d @$SOURCE_DATE_EPOCH +%Y)
|
||||||
|
|
||||||
DEBVERSION=$(head -1 debian/changelog | cut -d "(" -f 2 | cut -d ")" -f 1)
|
DEBVERSION=$(head -1 debian/changelog | cut -d "(" -f 2 | cut -d ")" -f 1)
|
||||||
if [ "$DEBVERSION" != "$RELEASE-1" ]; then
|
if [ "$DEBVERSION" != "$RELEASE-1" ]; then
|
||||||
@ -49,7 +50,7 @@ jobs:
|
|||||||
echo ""
|
echo ""
|
||||||
echo " *3proxy $RELEASE initial build"
|
echo " *3proxy $RELEASE initial build"
|
||||||
echo ""
|
echo ""
|
||||||
echo " -- z3APA3A <3apa3a@3proxy.org> $(date -R)"
|
echo " -- z3APA3A <3apa3a@3proxy.org> $(date -R -u -d @$SOURCE_DATE_EPOCH)"
|
||||||
echo ""
|
echo ""
|
||||||
cat debian/changelog.old
|
cat debian/changelog.old
|
||||||
} > debian/changelog
|
} > debian/changelog
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user