From 74ff5229830afcca8cd57976a48632fef6f85c17 Mon Sep 17 00:00:00 2001 From: Nicolas Viennot Date: Sat, 12 Oct 2019 14:13:12 -0400 Subject: [PATCH] Build static build releases on travis-ci --- .travis.yml | 42 ++++++++++++++++++++++++++++++++++-------- Dockerfile | 27 ++++++++++++++------------- package_release.sh | 14 ++++++++++++++ 3 files changed, 62 insertions(+), 21 deletions(-) create mode 100755 package_release.sh diff --git a/.travis.yml b/.travis.yml index a1d7e427..a02e89a8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,10 +1,36 @@ language: c +services: +- docker + matrix: - include: - - compiler: gcc - - compiler: clang - env: CFLAGS="-g -O2" -before_install: - - sudo apt-get update -qq - - sudo apt-get -y install debhelper autotools-dev dh-autoreconf file libncurses5-dev libevent-dev pkg-config libutempter-dev build-essential -script: (CFLAGS= ./autogen.sh) && ./configure --enable-debug && make + include: + - arch: amd64 + env: PLATFORM=amd64 + - arch: amd64 + env: PLATFORM=i386 + - arch: arm64 + env: PLATFORM=arm32v6 + - arch: arm64 + env: PLATFORM=arm32v7 + - arch: arm64 + env: PLATFORM=arm64v8 + +script: +- 'docker build . --tag local-$PLATFORM/tmate-build --build-arg PLATFORM=$PLATFORM' +# On arch=arm64, some directories are not setup correctly, and 'ruby -S gem +# install dpl' required by the release push scripts fails. +- 'if [ "$TRAVIS_TAG" ]; then sudo chown -R $USER: /var/lib/gems /usr/local/bin; fi' +- 'if [ "$TRAVIS_TAG" ]; then ./package_release.sh $TRAVIS_TAG $PLATFORM; fi' + +deploy: + provider: releases + api_key: + secure: T2109tjjOsrVLEpJZK/uxmO0AuDGXYFdN4AAsNTmVwu/W5dcX57Kk2TCgqDuLfD21iGGXP0U/OYHM06IfBDODBWCA9P8ASHYsenS7wIiFnvCEMbfzoAFyBMrXN2kNdM2+ho3aqc0xE2lQKOKDLxpGm5FZrzujscXXzxQjWBU5Hk= + skip_cleanup: true + overwrite: true + file_glob: true + file: /tmp/tmate-release/*.tar.* + on: + repo: tmate-io/tmate + branch: master + tags: true diff --git a/Dockerfile b/Dockerfile index 82d75ef4..c7aa2b9f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,5 @@ -FROM alpine:3.10 +ARG PLATFORM=amd64 +FROM ${PLATFORM}/alpine:3.10 WORKDIR /build @@ -8,20 +9,20 @@ RUN apk add --no-cache wget cmake make gcc g++ linux-headers zlib-dev openssl-de libevent libexecinfo openssl zlib RUN set -ex; \ - mkdir -p /src/libssh/build; \ - cd /src; \ - wget -O libssh.tar.xz https://www.libssh.org/files/0.9/libssh-0.9.0.tar.xz; \ - tar -xf libssh.tar.xz -C /src/libssh --strip-components=1; \ - cd /src/libssh/build; \ - cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr \ - -DWITH_SFTP=OFF -DWITH_SERVER=OFF -DWITH_PCAP=OFF \ - -DWITH_STATIC_LIB=ON -DWITH_GSSAPI=OFF ..; \ - make -j $(nproc); \ - make install + mkdir -p /src/libssh/build; \ + cd /src; \ + wget -O libssh.tar.xz https://www.libssh.org/files/0.9/libssh-0.9.0.tar.xz; \ + tar -xf libssh.tar.xz -C /src/libssh --strip-components=1; \ + cd /src/libssh/build; \ + cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr \ + -DWITH_SFTP=OFF -DWITH_SERVER=OFF -DWITH_PCAP=OFF \ + -DWITH_STATIC_LIB=ON -DWITH_GSSAPI=OFF ..; \ + make -j $(nproc); \ + make install COPY . . -RUN ./autogen.sh -RUN ./configure --enable-static +RUN ./autogen.sh && ./configure --enable-static RUN make -j $(nproc) RUN strip tmate +RUN ./tmate -V diff --git a/package_release.sh b/package_release.sh new file mode 100755 index 00000000..f4186e3c --- /dev/null +++ b/package_release.sh @@ -0,0 +1,14 @@ +#!/bin/bash +set -eux +VERSION=$1 +PLATFORM=$2 +RELEASE_NAME=tmate-$VERSION-static-linux-$PLATFORM + +# This assumes the follow command has already been run: +# docker build . --tag local-$PLATFORM/tmate-build --build-arg PLATFORM=$PLATFORM + +mkdir -p /tmp/tmate-release/$RELEASE_NAME +cd /tmp/tmate-release +docker run --rm local-$PLATFORM/tmate-build cat tmate > $RELEASE_NAME/tmate +chmod +x $RELEASE_NAME/tmate +tar -cf - $RELEASE_NAME | xz > tmate-$VERSION-static-linux-$PLATFORM.tar.xz