Skip to content

Commit

Permalink
feat: build sour in CI
Browse files Browse the repository at this point in the history
  • Loading branch information
cfoust committed Oct 31, 2024
1 parent d53a19e commit 13adfd3
Show file tree
Hide file tree
Showing 195 changed files with 42,812 additions and 68 deletions.
67 changes: 67 additions & 0 deletions .github/goreleaser-for-darwin.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
# Copyright (c) 2022-present Bytebase (Hong Kong) Limited.
#
# Portions of this software are licensed as follows:
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
before:
hooks:
- go mod download
builds:
- id: sour
main: ./cmd/server/.
binary: sour
ldflags:
- -w -s
- -X github.com/cfoust/sour/pkg/version.Version={{.Version}}
- -X github.com/cfoust/sour/pkg/version.GoVersion=${GO_VERSION}
- -X github.com/cfoust/sour/pkg/version.GitCommit={{.Commit}}
- -X github.com/cfoust/sour/pkg/version.BuildTime={{.Date}}
tags:
- release
- embed_frontend
env:
- VERSION="development"
- GO_VERSION="1.23"
- CGO_ENABLED=1
- GIT_COMMIT="unknown"
- BUILD_TIME="unknown"
- BUILD_USER="unknown"
goos:
- darwin
goarch:
- amd64
- arm64
snapshot:
name_template: "{{ incpatch .Version }}-next"
archives:
- builds:
- sour
files:
- LICENSE*
- README*
- src: "dist/assets/*"
dst: "assets"
brews:
- skip_upload: true
homepage: "https://github.com/cfoust/sour"
description: "A Sauerbraten server for the modern era."
license: "MIT"
repository:
owner: cfoust
name: homebrew-taps
68 changes: 68 additions & 0 deletions .github/goreleaser-for-linux.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
# Copyright (c) 2022-present Bytebase (Hong Kong) Limited.
#
# Portions of this software are licensed as follows:
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
before:
hooks:
- go mod download
builds:
- id: sour
main: ./cmd/server/.
binary: sour
ldflags:
- -w -s
- -X github.com/cfoust/sour/pkg/version.Version={{.Version}}
- -X github.com/cfoust/sour/pkg/version.GoVersion=${GO_VERSION}
- -X github.com/cfoust/sour/pkg/version.GitCommit={{.Commit}}
- -X github.com/cfoust/sour/pkg/version.BuildTime={{.Date}}
tags:
- release
- embed_frontend
env:
- VERSION="development"
- GO_VERSION="1.23"
- CGO_ENABLED=1
- GIT_COMMIT="unknown"
- BUILD_TIME="unknown"
- BUILD_USER="unknown"
goos:
- linux
goarch:
- amd64
overrides:
- goos: linux
goarch: amd64
env:
- CC=gcc
snapshot:
name_template: "{{ incpatch .Version }}-next"
archives:
- builds:
- sour
files:
- LICENSE*
- README*
- src: "dist/assets/*"
dst: "assets"
brews:
- skip_upload: true
repository:
owner: cfoust
name: homebrew-taps
42 changes: 42 additions & 0 deletions .github/goreleaser-release.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# Copyright (c) 2022-present Bytebase (Hong Kong) Limited.
#
# Portions of this software are licensed as follows:
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
builds:
- skip: true
changelog:
sort: asc
filters:
exclude:
- "^docs:"
- "^test:"
release:
draft: true
mode: append
extra_files:
- glob: ./sour-build/**/*
- glob: ./sour-build/checksums.txt
name_template: "Release {{.Tag}}"
header: |
# What's Changed
## Features
## Code Diff
209 changes: 159 additions & 50 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,58 +1,167 @@
# Taken from the Earthly documentation
# https://docs.earthly.dev/ci-integration/vendor-specific-guides/gh-actions-integration
name: Publish slim image
# Copyright (c) 2022-present Bytebase (Hong Kong) Limited.
#
# Portions of this software are licensed as follows:
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
name: Build release artifacts and draft release

on:
push:
branches: [ main ]
branches: [main]
pull_request:
branches: [ main ]
branches: [main]

jobs:
build:
build-game:
runs-on: ubuntu-latest
env:
FORCE_COLOR: 1
steps:
- uses: actions/checkout@v3
with:
lfs: true

- name: Checkout LFS objects
run: git lfs checkout

- name: Login to GitHub Container Registry
uses: docker/login-action@v1
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Put back the git branch into git (Earthly uses it for tagging)
run: |
branch=""
if [ -n "$GITHUB_HEAD_REF" ]; then
branch="$GITHUB_HEAD_REF"
else
branch="${GITHUB_REF##*/}"
fi
git checkout -b "$branch" || true
- name: Download latest earthly
run: "sudo /bin/sh -c 'wget https://github.com/earthly/earthly/releases/download/v0.6.10/earthly-linux-amd64 -O /usr/local/bin/earthly && chmod +x /usr/local/bin/earthly'"

- name: Earthly version
run: earthly --version

- name: Run build
run: |
branch=""
if [ -n "$GITHUB_HEAD_REF" ]; then
branch="$GITHUB_HEAD_REF"
else
branch="${GITHUB_REF##*/}"
fi
earthly --build-arg tag="$GITHUB_SHA" --ci --push +github
if [ "$branch" = "main" ]; then
earthly --build-arg tag="latest" --ci --push +github
fi
- uses: actions/checkout@v4

- name: Install Emscripten
run: |
sudo apt-get install -y build-essential cmake zlib1g-dev
git clone https://github.com/emscripten-core/emsdk.git
cd emsdk
./emsdk install 3.1.8
./emsdk activate 3.1.8
- name: Build Sauerbraten
run: |
source emsdk/emsdk_env.sh
cd game
./build
- name: Upload
uses: actions/upload-artifact@v3
with:
name: game
path: game/dist/game/*

build-client:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
lfs: true

- uses: actions/setup-node@v4
with:
node-version: "14.17.5"

- name: Build web client
run: |
cd client
yarn install
yarn build
cp src/index.html src/favicon.ico src/background.png dist/
- name: Upload
uses: actions/upload-artifact@v3
with:
name: client
path: client/dist/*

build-assets:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
lfs: true

- name: Install Emscripten
run: |
sudo apt-get install -y \
build-essential \
cmake \
imagemagick \
inotify-tools \
ucommon-utils \
unrar \
zlib1g-dev
git clone https://github.com/emscripten-core/emsdk.git
cd emsdk
./emsdk install 3.1.8
./emsdk activate 3.1.8
- name: Build sourdump
run: |
cd assets
mkdir dist
./setup
- name: Build desktop assets
run: |
source emsdk/emsdk_env.sh
cd assets
python3 base.py \
--root https://static.sourga.me/blobs/6481/.index.source \
--models \
--download \
--outdir dist \
complex dust2 turbine
- name: Upload
uses: actions/upload-artifact@v3
with:
name: assets
path: assets/dist/*
include-hidden-files: true

build-linux-binary:
needs: [build-assets, build-client, build-game]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Download web client
uses: actions/download-artifact@v3
with:
name: client
path: ./cmd/server/static/site

- name: Download game
uses: actions/download-artifact@v3
with:
name: game
path: ./cmd/server/static/site/game

- name: Download assets
uses: actions/download-artifact@v3
with:
name: assets
path: ./dist/assets

- uses: actions/setup-go@v4
with:
go-version: 1.23

- name: Install enet
run: |
sudo apt-get install -y libenet-dev
- name: Build
uses: goreleaser/goreleaser-action@v5
with:
args: release --skip=publish --snapshot --config .github/goreleaser-for-linux.yaml
version: v1.23.0

- name: Upload
uses: actions/upload-artifact@v3
with:
name: sour-linux
path: dist/sour*
Loading

0 comments on commit 13adfd3

Please sign in to comment.