runs-on: ubuntu-16.04
strategy:
matrix:
- arch: [i686, x86_64, arm, armhf, aarch64, mips, mipsel, mips64, mips64el]
+ target: [i686, x86_64, arm, armhf, aarch64, mips, mipsel, mips64, mips64el]
steps:
- uses: actions/checkout@v2
- name: Install packages
run: |
sudo apt-get update
sudo apt-get install -y autoconf automake build-essential cmake curl file libtool
- - name: Cross build (${{ matrix.arch }})
+ - name: Cross build (${{ matrix.target }})
env:
- ARCH: ${{ matrix.arch }}
- run: ./scripts/cross-build.sh $ARCH
+ BUILD_TARGET: ${{ matrix.target }}
+ run: ./scripts/cross-build.sh
- uses: actions/upload-artifact@v1
with:
- name: ttyd.${{ matrix.arch }}
+ name: ttyd.${{ matrix.target }}
path: build/ttyd
- "*"
jobs:
+ release:
+ runs-on: ubuntu-16.04
+ outputs:
+ upload_url: ${{ steps.create_release.outputs.upload_url }}
+ steps:
+ - name: Create Release
+ id: create_release
+ uses: actions/create-release@v1
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ with:
+ tag_name: ${{ github.ref }}
+ release_name: ${{ github.ref }}
+ draft: true
+ prerelease: false
+
build:
runs-on: ubuntu-16.04
+ needs: release
+ strategy:
+ matrix:
+ target: [i686, x86_64, arm, armhf, aarch64, mips, mipsel, mips64, mips64el]
steps:
- uses: actions/checkout@v2
- name: Install packages
run: |
sudo apt-get update
sudo apt-get install -y autoconf automake build-essential cmake curl file libtool
- - name: Build Release
- run: |
- mkdir -p bin
- for arch in i686 x86_64 arm armhf aarch64 mips mipsel mips64 mips64el; do
- ./scripts/cross-build.sh $arch
- cp build/ttyd bin/ttyd_linux.$arch
- sha256sum bin/ttyd_linux.$arch >> bin/SHA256SUMS
- done
- - uses: ncipollo/release-action@v1
+ - name: Cross build (${{ matrix.target }})
+ env:
+ BUILD_TARGET: ${{ matrix.target }}
+ run: ./scripts/cross-build.sh
+ - name: Upload assets
+ id: upload-release-asset
+ uses: actions/upload-release-asset@v1
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
- artifact: "bin/*"
- token: ${{ secrets.GITHUB_TOKEN }}
+ upload_url: ${{ needs.release.outputs.upload_url }}
+ asset_path: build/ttyd
+ asset_name: ttyd.${{ matrix.target }}
+ asset_content_type: application/octet-stream
\ No newline at end of file
#!/bin/bash
-
+#
+# Example:
+# env BUILD_TARGET=mips WITH_SSL=true ./scripts/cross-build.sh
+#
set -eo pipefail
CROSS_ROOT="${CROSS_ROOT:-/opt/cross}"
STAGE_ROOT="${STAGE_ROOT:-/opt/stage}"
BUILD_ROOT="${BUILD_ROOT:-/opt/build}"
-WITH_SSL="${WITH_SSL:-}"
-BUILD_TARGET="$1"
+BUILD_TARGET="${BUILD_TARGET:-x86_64}"
+WITH_SSL=${WITH_SSL:-false}
ZLIB_VERSION="${ZLIB_VERSION:-1.2.11}"
JSON_C_VERSION="${JSON_C_VERSION:-0.14}"
aarch64) echo linux-aarch64 ;;
mips|mipsel) echo linux-mips32 ;;
mips64|mips64el) echo linux64-mips64 ;;
- *) echo "unsupported target: $1" && exit 1
+ *) echo "unknown openssl target: $1" && exit 1
esac
}
sed -i 's/ websockets_shared//g' cmake/LibwebsocketsConfig.cmake.in
sed -i '/PC_OPENSSL/d' CMakeLists.txt
mkdir build && cd build
- [ -z "${WITH_SSL}" ] && CMAKE_OPTIONS="-DLWS_WITH_SSL=OFF"
+ [ "${WITH_SSL}" = true ] || CMAKE_OPTIONS="-DLWS_WITH_SSL=OFF"
cmake -DCMAKE_TOOLCHAIN_FILE="${BUILD_DIR}/cross-${TARGET}.cmake" "${CMAKE_OPTIONS}" \
-DCMAKE_INSTALL_PREFIX="${STAGE_DIR}" \
-DCMAKE_FIND_LIBRARY_SUFFIXES=".a" \
build_zlib
build_json-c
build_libuv
- [ -n "${WITH_SSL}" ] && build_openssl
+ [ "${WITH_SSL}" = true ] && build_openssl
build_libwebsockets
build_ttyd
}
-case $1 in
+case ${BUILD_TARGET} in
i686|x86_64|aarch64|mips|mipsel|mips64|mips64el)
- build "$1-linux-musl" "$1"
+ build "${BUILD_TARGET}-linux-musl" "${BUILD_TARGET}"
;;
arm)
- build arm-linux-musleabi "$1"
+ build arm-linux-musleabi "${BUILD_TARGET}"
;;
armhf)
- build arm-linux-musleabihf "$1"
+ build arm-linux-musleabihf "${BUILD_TARGET}"
;;
*)
- echo "usage: $0 i686|x86_64|arm|armhf|aarch64|mips|mipsel|mips64|mips64el" && exit 1
+ echo "unknown cross target: ${BUILD_TARGET}" && exit 1
esac