name: Build Quasar SPA and Go Backend for lightController on: push: tags: - '*' jobs: build: runs-on: ubuntu-latest strategy: matrix: include: - os: windows arch: amd64 ext: .exe - os: linux arch: amd64 ext: "" - os: linux arch: arm64 ext: "" - os: linux arch: arm arm_version: 6 ext: "" steps: - name: Checkout repository uses: actions/checkout@v4 - name: Set ip Node.js uses: actions/setup-node@v4 with: node-version: '20' - name: Install dependecies run: npm install - name: Install Quasar CLI run: npm install -g @quasar/cli - name: Build Quasar SPA run: quasar build - name: Ensure latest Go is installed in /data/go run: | export GOROOT=/data/go/go export PATH=$GOROOT/bin:$PATH export GOCACHE=/data/gocache export GOMODCACHE=/data/gomodcache mkdir -p $GOCACHE $GOMODCACHE if [ ! -x "$GOROOT/bin/go" ]; then echo "Go not found in $GOROOT, downloading latest stable..." GO_VERSION=$(curl -s https://go.dev/VERSION?m=text | head -n1) echo "Latest version is $GO_VERSION" mkdir -p /data/go curl -sSL "https://go.dev/dl/${GO_VERSION}.linux-amd64.tar.gz" -o /tmp/go.tar.gz tar -C /data/go -xzf /tmp/go.tar.gz else echo "Using cached Go from $GOROOT" fi go version - name: Go Mod Tidy & Download working-directory: ./backend run: | export GOROOT=/data/go/go export PATH=$GOROOT/bin:$PATH export GOCACHE=/data/gocache export GOMODCACHE=/data/gomodcache mkdir -p $GOCACHE $GOMODCACHE go mod tidy -v go mod download - name: Build go backend binary working-directory: ./backend run: | export GOROOT=/data/go/go export PATH=$GOROOT/bin:$PATH export GOCACHE=/data/gocache export GOMODCACHE=/data/gomodcache mkdir -p $GOCACHE $GOMODCACHE OUTPUT="../server-${{ matrix.goos }}-${{ matrix.goarch }}" if [ "${{ matrix.goos }}" == "windows" ]; then OUTPUT="${OUTPUT}.exe" fi GOOS=${{ matrix.goos }} GOARCH=${{ matrix.goarch }} go build -ldflags="-s -w" -trimpath -o "$OUTPUT" main.go - name: Upload build artifacts uses: actions/upload-artifact@v3 with: name: lightcontroller-${{ matrix.goos }}-${{ matrix.goarch }} path: | ./dist/spa server-${{ matrix.goos }}-${{ matrix.goarch }}${{ (matrix.goos == 'windows' && '.exe') || '' }}