Skip to content

Commit

Permalink
feat(ci): Add aarch64 builder
Browse files Browse the repository at this point in the history
  • Loading branch information
mishamyrt committed Aug 12, 2023
1 parent b133d75 commit 6f88aab
Show file tree
Hide file tree
Showing 6 changed files with 173 additions and 44 deletions.
82 changes: 69 additions & 13 deletions .github/workflows/build.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Build Nuga app
name: Build Nuga

on:
push:
Expand All @@ -9,7 +9,7 @@ on:

jobs:
linux:
name: Build Nuga AppImage
name: Build Nuga.AppImage
runs-on: ubuntu-latest
steps:
- name: Checkout
Expand All @@ -19,25 +19,81 @@ jobs:
with:
go-version: '1.20'
cache-dependency-path: app/go.sum
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- uses: pnpm/action-setup@v2
- name: Setup QEMU
uses: docker/setup-qemu-action@v2
- name: Setup pnpm
uses: pnpm/action-setup@v2
with:
run_install: |
cwd: app/frontend/
args: [--frozen-lockfile]
version: 8.6.2
- name: Install C/C++ deps
- name: Setup native deps
run: sudo apt install libudev-dev libwebkit2gtk-4.0-dev libgtk-3-dev -y
- name: Install Wails
- name: Setup Wails
run: go install github.com/wailsapp/wails/v2/cmd/[email protected]
- name: Install frontend deps
run: |
cd app/frontend
pnpm install --frozen-lockfile
cd ../..
- name: Sync workspace
run: go work sync
- name: Build x86_64 binary
run: make build/linux
- name: Build aarch64 binary
run: make linux-builder/release/arm64
run: make linux-builder/binary-arm64
- name: Build AppImages
run: make linux-builder/appimage
- name: Upload AppImages
uses: actions/upload-artifact@v3
with:
name: linux-dist
path: ./dist
# mac:
# name: Build Nuga.app
# runs-on: macos-latest
# steps:
# - name: Checkout
# uses: actions/checkout@v3
# - name: Setup Go
# uses: actions/setup-go@v4
# with:
# go-version: '1.20'
# cache-dependency-path: app/go.sum
# - name: Setup native deps
# run: brew install hidapi
# - name: Setup pnpm
# uses: pnpm/action-setup@v2
# with:
# run_install: |
# cwd: app/frontend/
# args: [--frozen-lockfile]
# version: 8.6.2
# - name: Setup Wails
# run: go install github.com/wailsapp/wails/v2/cmd/[email protected]
# - name: Sync workspace
# run: go work sync
# - name: Install certificate
# env:
# APPLE_DEVELOPER_CERT: ${{ secrets.APPLE_DEVELOPER_CERT }}
# APPLE_DEVELOPER_PRIVATE_KEY: ${{ secrets.APPLE_DEVELOPER_PRIVATE_KEY }}
# run: |
# security create-keychain -p "" build.keychain
# security unlock-keychain -p "" build.keychain
# security set-keychain-settings -lut 21600 build.keychain
# security default-keychain -s build.keychain
# security unlock-keychain -p ""
# echo "$APPLE_DEVELOPER_CERT" | base64 --decode -o Nuga.cer -i -
# echo "$APPLE_DEVELOPER_PRIVATE_KEY" | base64 --decode -o Nuga.p12 -i -
# sudo security authorizationdb write com.apple.trust-settings.admin allow
# sudo security add-trusted-cert \
# -d \
# -r trustRoot \
# -k build.keychain \
# Nuga.cer
# security import Nuga.p12 -P "" -k build.keychain
# security delete-keychain login.keychain
# - name: Build applications
# run: make build/darwin
# - name: Upload applications
# uses: actions/upload-artifact@v3
# with:
# name: mac-dist
# path: ./dist

45 changes: 45 additions & 0 deletions .github/workflows/linux-builder.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
name: Build Linux builder

on:
workflow_dispatch:
push:
# branches:
# - main
paths:
- '.github/workflows/linux-builder.yaml'
- 'app/build/linux/wails.Dockerfile'
- 'app/build/linux/build-nuga.sh'

jobs:
arm64:
name: Build aarch64 image builder
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Set up Docker BuildX
uses: docker/setup-buildx-action@v2
- name: Login to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build image
run: make linux-builder/image-arm64
- name: Push image
run: make linux-builder/push-image-arm64
amd64:
name: Build amd64 image builder
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Login to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build image
run: make linux-builder/image-amd64
- name: Push image
run: make linux-builder/push-image-amd64
1 change: 1 addition & 0 deletions app/build/linux/build-nuga.sh
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,5 @@ wails build \
-s \
-o "Nuga-linux-$ARCH" \
-trimpath \
-skipbindings \
-ldflags "$LD_FLAGS"
2 changes: 1 addition & 1 deletion app/build/linux/wails.Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ RUN apt-get update && \
gnupg \
libudev-dev \
libgtk-3-dev \
libgtk-3-0 \
libwebkit2gtk-4.0-dev \
gcc \
build-essential
Expand All @@ -19,6 +18,7 @@ RUN apt-get update && \
RUN go install github.com/wailsapp/wails/v2/cmd/[email protected]

COPY build-nuga.sh /usr/bin/build-nuga
RUN chmod +x /usr/bin/build-nuga

# Set working directory (project root)
WORKDIR /opt/nuga
Expand Down
5 changes: 2 additions & 3 deletions makefiles/build.mk
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ endef
define pack_darwin_release
mkdir -p "$(DIST_PATH)/$(1)"
mv "$(BUILD_PATH)/Nuga-$(1).app" "$(DIST_PATH)/$(1)/Nuga.app"
cd "$(DIST_PATH)/$(1)"; codesign -fs 'Nuga Developer' --deep Nuga.app
cd "$(DIST_PATH)/$(1)"; codesign --keychain build.keychain -fs 'Nuga Developer' --deep Nuga.app
cd "$(DIST_PATH)/$(1)"; zip -9 -y -r -q Nuga.zip Nuga.app
mv "$(DIST_PATH)/$(1)/Nuga.zip" "$(DIST_PATH)/Nuga-mac-$(VERSION)-$(1).zip"
rm -rf "$(DIST_PATH)/$(1)"
Expand Down Expand Up @@ -48,8 +48,7 @@ build:
build/release:
mkdir -p "$(DIST_PATH)"
make build/darwin
make linux-builder/binary
make linux-builder/appimage
make build/linux-in-docker

.PHONY: build/dumper
build/dumper:
Expand Down
82 changes: 55 additions & 27 deletions makefiles/linux-builder.mk
Original file line number Diff line number Diff line change
@@ -1,65 +1,93 @@
BUILDER_IMAGE_NAME = nuga-linux-builder
BUILDER_IMAGE = mishamyrt/nuga-linux-builder
APPIMAGE_BUILDER_IMAGE = mishamyrt/nuga-appimage-builder

# Wails builder functions

define build_builder
cd app/build/linux; docker buildx build \
--file wails.Dockerfile \
--load \
--platform "linux/$(1)" \
-t "$(BUILDER_IMAGE_NAME)-$(1):latest" \
-t "$(BUILDER_IMAGE):latest-$(1)" \
.
endef

define copy_appimage
cp "app/build/bin/Nuga-latest-$(1).AppImage" "$(DIST_PATH)/Nuga-$(VERSION)-$(2).AppImage"
define push_builder
docker push "$(BUILDER_IMAGE):latest-$(1)"
endef

# Binary functions

define build_binary
docker rm "nuga-builder-$(1)" || true
docker run \
-it \
--name "nuga-builder-$(1)" \
--rm \
--platform "linux/$(1)" \
--volume ".:/opt/nuga" \
"$(BUILDER_IMAGE_NAME)-$(1):latest" \
build-nuga $(VERSION) || docker rm "nuga-builder-$(1)"
docker rm "nuga-builder-$(1)" || true
"$(BUILDER_IMAGE):latest-$(1)" \
build-nuga $(VERSION)
endef

.PHONY: linux-builder/setup-appimage
linux-builder/setup-appimage:
define copy_appimage
cp "app/build/bin/Nuga-latest-$(1).AppImage" "$(DIST_PATH)/Nuga-$(VERSION)-$(2).AppImage"
endef

# AppImage builder

.PHONY: linux-builder/image-appimage
linux-builder/image-appimage:
cd app/build/linux; docker buildx build \
--file appimage.Dockerfile \
--load \
--platform "linux/amd64" \
-t "appimage-builder:latest" .
-t "$(APPIMAGE_BUILDER_IMAGE):latest" .

.PHONY: linux-builder/image-appimage
linux-builder/push-image-appimage:
docker push "$(APPIMAGE_BUILDER_IMAGE):latest"

.PHONY: linux-builder/setup
linux-builder/setup:
make linux-builder/setup-appimage
# ARM64 image actions

.PHONY: linux-builder/image-arm64
linux-builder/image-arm64:
$(call build_builder,arm64)

.PHONY: linux-builder/push-image-arm64
linux-builder/push-image-arm64:
$(call push_builder,arm64)

# AMD64 image actions

.PHONY: linux-builder/image-amd64
linux-builder/image-amd64:
$(call build_builder,amd64)

.PHONY: linux-builder/release
linux-builder/release:
make linux-builder/binary
make linux-builder/appimage
.PHONY: linux-builder/push-image-amd64
linux-builder/push-image-amd64:
$(call push_builder,amd64)

.PHONY: linux-builder/shell
linux-builder/binary:
# Binary actions

.PHONY: linux-builder/binary-arm64
linux-builder/binary-arm64:
$(call build_binary,arm64)

.PHONY: linux-builder/binary-amd64
linux-builder/binary-amd64:
$(call build_binary,amd64)

.PHONY: linux-builder/release/arm64
linux-builder/release/arm64:
make linux-builder/setup-appimage
$(call build_builder,arm64)
$(call build_binary,arm64)
.PHONY: linux-builder/binary
linux-builder/binary:
make linux-builder/binary-arm64
make linux-builder/binary-amd64

# AppImage packing

.PHONY: linux-builder/appimage
linux-builder/appimage:
docker rm nuga-appimage-builder || true
docker run \
-it \
--rm \
--name nuga-appimage-builder \
--platform "linux/amd64" \
--volume ".:/opt/nuga" \
Expand Down

0 comments on commit 6f88aab

Please sign in to comment.