Skip to content
This repository has been archived by the owner on Sep 2, 2024. It is now read-only.

Commit

Permalink
chore: build linux HTTP binaries for multiple architectures
Browse files Browse the repository at this point in the history
  • Loading branch information
Roman Dmitrienko committed Jun 23, 2024
1 parent c069234 commit 40c85fb
Showing 1 changed file with 59 additions and 14 deletions.
73 changes: 59 additions & 14 deletions .github/workflows/http.yml
Original file line number Diff line number Diff line change
@@ -1,12 +1,33 @@
name: Linux-amd64 build executable
name: Linux build HTTP executable
on:
push:
workflow_call:
release:
types: [published]
types: [ published ]
jobs:
build:
runs-on: ubuntu-20.04

strategy:
matrix:
build: [
{
arch: x86_64,
breez_arch: linux-amd64,
alby_arch: x86_64-unknown-linux-gnu,
},
{
arch: armv6,
breez_arch: "",
alby_arch: arm-unknown-linux-gnueabihf,
},
{
arch: aarch64,
breez_arch: linux-aarch64,
alby_arch: aarch64-unknown-linux-gnu,
}
]

steps:
- uses: actions/checkout@v4
name: Check out code
Expand Down Expand Up @@ -44,36 +65,60 @@ jobs:

- name: Create build directory
run: |
mkdir -p ./build/bin/albyhub-${{runner.os}}-x86_64/lib
mkdir -p ./build/bin/albyhub-${{runner.os}}-${{matrix.build.arch}}/lib
- name: Install ARM6 cross-compiler
if: matrix.build.arch == 'armv6'
run: |
wget -nv https://github.com/getAlby/gcc-arm-linux-gnueabihf/releases/download/v1.0.0/armv6-unknown-linux-gnueabihf.tar.bz2
tar -xf armv6-unknown-linux-gnueabihf.tar.bz2
echo "GOOS=linux" >> $GITHUB_ENV
echo "GOARCH=arm" >> $GITHUB_ENV
echo "GOARM=6" >> $GITHUB_ENV
echo "CC=$GITHUB_WORKSPACE/armv6-unknown-linux-gnueabihf/bin/armv6-unknown-linux-gnueabihf-gcc" >> $GITHUB_ENV
echo "GOTAGS=skip_breez,netgo" >> $GITHUB_ENV
- name: Install ARM64 cross-compiler
if: matrix.build.arch == 'aarch64'
run: |
sudo apt-get install -y gcc-aarch64-linux-gnu
echo "GOOS=linux" >> $GITHUB_ENV
echo "GOARCH=arm64" >> $GITHUB_ENV
echo "CC=aarch64-linux-gnu-gcc" >> $GITHUB_ENV
echo "GOTAGS=netgo" >> $GITHUB_ENV
- name: Build Binary for linux amd64
run: CGO_ENABLED=1 go build -o build/bin/albyhub-${{runner.os}}-x86_64/bin/albyhub-x86_64 cmd/http/main.go
- name: Build Binary for linux
env:
CGO_ENABLED: 1
run: go build -tags ${{env.GOTAGS}} -o build/bin/albyhub-${{runner.os}}-${{matrix.build.arch}}/bin/albyhub-${{matrix.build.arch}} cmd/http/main.go

- name: Copy shared libraries to the output directory
run: |
mkdir -p ./build/bin/albyhub-${{runner.os}}-x86_64/lib
cp `go list -m -f "{{.Dir}}" github.com/breez/breez-sdk-go`/breez_sdk/lib/linux-amd64/libbreez_sdk_bindings.so ./build/bin/albyhub-${{runner.os}}-x86_64/lib/
cp `go list -m -f "{{.Dir}}" github.com/getAlby/glalby-go`/glalby/x86_64-unknown-linux-gnu/libglalby_bindings.so ./build/bin/albyhub-${{runner.os}}-x86_64/lib/
cp `go list -m -f "{{.Dir}}" github.com/getAlby/ldk-node-go`/ldk_node/x86_64-unknown-linux-gnu/libldk_node.so ./build/bin/albyhub-${{runner.os}}-x86_64/lib/
mkdir -p ./build/bin/albyhub-${{runner.os}}-${{matrix.build.arch}}/lib
if [ "${{matrix.build.breez_arch}}" != "" ]; then
cp `go list -m -f "{{.Dir}}" github.com/breez/breez-sdk-go`/breez_sdk/lib/${{matrix.build.breez_arch}}/libbreez_sdk_bindings.so ./build/bin/albyhub-${{runner.os}}-${{matrix.build.arch}}/lib/
fi
cp `go list -m -f "{{.Dir}}" github.com/getAlby/glalby-go`/glalby/${{matrix.build.alby_arch}}/libglalby_bindings.so ./build/bin/albyhub-${{runner.os}}-${{matrix.build.arch}}/lib/
cp `go list -m -f "{{.Dir}}" github.com/getAlby/ldk-node-go`/ldk_node/${{matrix.build.alby_arch}}/libldk_node.so ./build/bin/albyhub-${{runner.os}}-${{matrix.build.arch}}/lib/
shell: bash

- name: Patch executable RPATH
run: |
patchelf --force-rpath --set-rpath '$ORIGIN/../lib' ./build/bin/albyhub-${{runner.os}}-x86_64/bin/albyhub-x86_64
patchelf --force-rpath --set-rpath '$ORIGIN/../lib' ./build/bin/albyhub-${{runner.os}}-${{matrix.build.arch}}/bin/albyhub-${{matrix.build.arch}}
- name: Add Linux perms
run: |
chmod +x build/bin/albyhub-${{runner.os}}-x86_64/bin/albyhub-x86_64
chmod +x build/bin/albyhub-${{runner.os}}-${{matrix.build.arch}}/bin/albyhub-${{matrix.build.arch}}
shell: bash

- name: Make output tar archive to keep file permissions
run: |
mkdir -p ./build/out
tar czf ./build/out/albyhub-${{runner.os}}-x86_64.tar.gz -C ./build/bin/albyhub-${{runner.os}}-x86_64 .
tar czf ./build/out/albyhub-${{runner.os}}-${{matrix.build.arch}}.tar.gz -C ./build/bin/albyhub-${{runner.os}}-${{matrix.build.arch}} .
- uses: actions/upload-artifact@v4
with:
name: albyhub-${{runner.os}}-x86_64.tar.gz
name: albyhub-${{runner.os}}-${{matrix.build.arch}}.tar.gz
path: |
./build/out/albyhub-${{runner.os}}-x86_64.tar.gz
./build/out/albyhub-${{runner.os}}-${{matrix.build.arch}}.tar.gz
if-no-files-found: error

0 comments on commit 40c85fb

Please sign in to comment.