Explorar el Código

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 hace 2 años
padre
commit
58780ca88e
Se han modificado 1 ficheros con 83 adiciones y 68 borrados
  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
 DESTDIR=/usr/bin
 DOCDIR=/usr/share/man/
 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
 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}
 Package: ${NAME}
 Version: ${VERSION}
 Version: ${VERSION}
 Section: utils
 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
  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.
  Git status for a directory, or recursing into directories with a tree view.
 EOM
 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/
 Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
 Upstream-Name: ${NAME}
 Upstream-Name: ${NAME}
 Upstream-Contact: Christina Sørensen <christina@cafkafk.com>
 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
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  SOFTWARE.
  SOFTWARE.
 EOM
 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