Bläddra i källkod

refactor(devtools): over-engineer deb-package.sh

This now automatically checks out the latest release commit, pulls the
binary archives for all three linux architectures from the release
package, verifies that the md5sum is in the release notes, and then
packs the deb packages

Signed-off-by: Sandro-Alessio Gierens <sandro@gierens.de>
Sandro-Alessio Gierens 2 år sedan
förälder
incheckning
58780ca88e
1 ändrade filer med 83 tillägg och 68 borttagningar
  1. 83 68
      devtools/deb-package.sh

+ 83 - 68
devtools/deb-package.sh

@@ -1,26 +1,68 @@
-#!/bin/bash
-
-if [ -z "$1" ]
-  then
-    echo "Usage: deb-package.sh <version>"
-    echo ""
-    echo "Package the given version number into a .deb package."
-    echo "Example: deb-package.sh 0.10.7"
-    exit 1
-fi
+#!/bin/bash -e
 
+REPO_URL="https://github.com/eza-community/eza"
+NAME="eza"
 DESTDIR=/usr/bin
 DOCDIR=/usr/share/man/
-NAME="eza"
-VERSION=$1
-ARCH="amd64"
-DEB_TMP_DIR="${NAME}_${VERSION}_${ARCH}"
-DEB_PACKAGE="${NAME}_${VERSION}_${ARCH}.deb"
 
-cargo build --release --features vendored-libgit2
+TAG=$(git describe --tags --abbrev=0)
+VERSION=${TAG:1}
+
+echo "checkout tag ${TAG}"
+git checkout --quiet ${TAG}
+
+echo "build man pages"
 just man
 
-read -r -d '' DEB_CONTROL << EOM
+declare -A TARGETS
+TARGETS["amd64"]="x86_64-unknown-linux-gnu"
+TARGETS["arm64"]="aarch64-unknown-linux-gnu"
+TARGETS["armhf"]="arm-unknown-linux-gnueabihf"
+
+echo "download release notes"
+RELEASE_NOTES=$(curl -s ${REPO_URL}/releases/tag/${TAG})
+
+for ARCH in "${!TARGETS[@]}"; do
+    echo "building ${ARCH} package:"
+
+    DEB_TMP_DIR="${NAME}_${VERSION}_${ARCH}"
+    DEB_PACKAGE="${NAME}_${VERSION}_${ARCH}.deb"
+
+    TARGET=${TARGETS[$ARCH]}
+    echo " -> downloading ${TARGET} archive"
+    wget -q -O "${ARCH}.tar.gz" "${REPO_URL}/releases/download/${TAG}/${NAME}_${TARGET}.tar.gz"
+
+    echo " -> verifying ${TARGET} archive"
+    CHECKSUM=$(md5sum "${ARCH}.tar.gz" | cut -d ' ' -f 1)
+    echo "    checksum: ${CHECKSUM}"
+    grep -q "${CHECKSUM}" <<< "${RELEASE_NOTES}" \
+        || (echo "checksum mismatch" && exit 1)
+    echo "    checksum ok"
+
+    echo " -> creating directory structure"
+    mkdir -p ${DEB_TMP_DIR}
+    mkdir -p ${DEB_TMP_DIR}${DESTDIR}
+    mkdir -p ${DEB_TMP_DIR}${DOCDIR}
+    mkdir -p ${DEB_TMP_DIR}${DOCDIR}/man1
+    mkdir -p ${DEB_TMP_DIR}${DOCDIR}/man5
+    mkdir -p ${DEB_TMP_DIR}/DEBIAN
+    mkdir -p ${DEB_TMP_DIR}/usr/share/doc/${NAME}
+    chmod 755 -R ${DEB_TMP_DIR}
+    
+    echo " -> extract executable"
+    tar -xzf "${ARCH}.tar.gz"
+    cp ${NAME} ${DEB_TMP_DIR}${DESTDIR}
+    chmod 755 ${DEB_TMP_DIR}${DESTDIR}/${NAME}
+
+    echo " -> compress man pages"
+    gzip -cn9 target/man/eza.1 > ${DEB_TMP_DIR}${DOCDIR}man1/eza.1.gz
+    gzip -cn9 target/man/eza_colors.5 > ${DEB_TMP_DIR}${DOCDIR}man5/eza_colors.5.gz
+    gzip -cn9 target/man/eza_colors-explanation.5 > ${DEB_TMP_DIR}${DOCDIR}man5/eza_colors-explanation.5.gz
+    chmod 644 ${DEB_TMP_DIR}${DOCDIR}/**/*.gz
+    
+    echo " -> create control file"
+    touch ${DEB_TMP_DIR}/DEBIAN/control
+    cat > ${DEB_TMP_DIR}/DEBIAN/control <<EOM
 Package: ${NAME}
 Version: ${VERSION}
 Section: utils
@@ -36,8 +78,17 @@ Description: Modern replacement for ls
  It also has extra features not present in the original ls, such as viewing the
  Git status for a directory, or recursing into directories with a tree view.
 EOM
-
-read -r -d '' DEB_COPYRIGHT << EOM
+    chmod 644 ${DEB_TMP_DIR}/DEBIAN/control
+    
+    echo " -> copy changelog"
+    cp CHANGELOG.md ${DEB_TMP_DIR}/usr/share/doc/${NAME}/changelog
+    gzip -cn9 ${DEB_TMP_DIR}/usr/share/doc/${NAME}/changelog > ${DEB_TMP_DIR}/usr/share/doc/${NAME}/changelog.gz
+    rm ${DEB_TMP_DIR}/usr/share/doc/${NAME}/changelog
+    chmod 644 ${DEB_TMP_DIR}/usr/share/doc/${NAME}/changelog.gz
+    
+    echo " -> create copyright file"
+    touch ${DEB_TMP_DIR}/usr/share/doc/${NAME}/copyright
+    cat > ${DEB_TMP_DIR}/usr/share/doc/${NAME}/copyright << EOM
 Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
 Upstream-Name: ${NAME}
 Upstream-Contact: Christina Sørensen <christina@cafkafk.com>
@@ -70,52 +121,16 @@ License: MIT
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  SOFTWARE.
 EOM
-
-# create temporary build directory
-mkdir -p ${DEB_TMP_DIR}
-
-# create directory structure
-mkdir -p ${DEB_TMP_DIR}${DESTDIR}
-mkdir -p ${DEB_TMP_DIR}${DOCDIR}
-mkdir -p ${DEB_TMP_DIR}${DOCDIR}/man1
-mkdir -p ${DEB_TMP_DIR}${DOCDIR}/man5
-mkdir -p ${DEB_TMP_DIR}/DEBIAN
-mkdir -p ${DEB_TMP_DIR}/usr/share/doc/${NAME}
-
-# fix directory permissions
-chmod 755 -R ${DEB_TMP_DIR}
-
-# binary
-cp target/release/${NAME} ${DEB_TMP_DIR}${DESTDIR}
-chmod 755 ${DEB_TMP_DIR}${DESTDIR}/${NAME}
-
-# man page
-gzip -cn9 target/man/eza.1 > ${DEB_TMP_DIR}${DOCDIR}man1/eza.1.gz
-gzip -cn9 target/man/eza_colors.5 > ${DEB_TMP_DIR}${DOCDIR}man5/eza_colors.5.gz
-gzip -cn9 target/man/eza_colors-explanation.5 > ${DEB_TMP_DIR}${DOCDIR}man5/eza_colors-explanation.5.gz
-chmod 644 ${DEB_TMP_DIR}${DOCDIR}/**/*.gz
-
-# control file
-touch ${DEB_TMP_DIR}/DEBIAN/control
-echo "${DEB_CONTROL}" > ${DEB_TMP_DIR}/DEBIAN/control
-chmod 644 ${DEB_TMP_DIR}/DEBIAN/control
-
-# changelog
-cp CHANGELOG.md ${DEB_TMP_DIR}/usr/share/doc/${NAME}/changelog
-gzip -cn9 ${DEB_TMP_DIR}/usr/share/doc/${NAME}/changelog > ${DEB_TMP_DIR}/usr/share/doc/${NAME}/changelog.gz
-rm ${DEB_TMP_DIR}/usr/share/doc/${NAME}/changelog
-chmod 644 ${DEB_TMP_DIR}/usr/share/doc/${NAME}/changelog.gz
-
-# copyright file
-touch ${DEB_TMP_DIR}/usr/share/doc/${NAME}/copyright
-echo "${DEB_COPYRIGHT}" > ${DEB_TMP_DIR}/usr/share/doc/${NAME}/copyright
-chmod 644 ${DEB_TMP_DIR}/usr/share/doc/${NAME}/copyright
-
-# build package
-dpkg-deb --build --root-owner-group ${DEB_TMP_DIR}
-
-# clean up
-rm -rf ${DEB_TMP_DIR}
-
-# test package
-lintian ${DEB_PACKAGE}
+    chmod 644 ${DEB_TMP_DIR}/usr/share/doc/${NAME}/copyright
+    
+    echo " -> build ${ARCH} package"
+    dpkg-deb --build --root-owner-group ${DEB_TMP_DIR} > /dev/null
+    
+    echo " -> cleanup"
+    rm -rf ${DEB_TMP_DIR} ${ARCH}.tar.gz ${NAME}
+    
+    # gierens: this does not work on my arch at the moment and
+    #          i'm verifying on the repo host anyway thus the || true
+    echo " -> lint ${ARCH} package"
+    lintian ${DEB_PACKAGE} || true
+done