-
Notifications
You must be signed in to change notification settings - Fork 19
174 lines (157 loc) · 7.05 KB
/
build.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
# ----------------------------------------------------------------------------
# GitHub Actions workflow to build and package the project using Castle Game Engine.
# Details:
# - Builds and packages: creates release packages (zip,tar.gz)
# for all interesting platforms.
# Some of them use our self-hosted runners, some use Docker on GH-hosted runners.
# - Uploads the release packages as GitHub release of "snapshot" tag,
# https://github.com/castle-engine/castle-model-viewer/releases/tag/snapshot
# - Updates the "snapshot" tag to point to the build commit.
# ----------------------------------------------------------------------------
name: Build
on: [push, pull_request]
env:
# To which GitHub release tag should we upload artifacts.
# Can be "snapshot" or "vX.Y.Z" (latter when we make stable release).
#release_tag: snapshot
#release_tag: vX.Y.Z
release_tag: v5.0.0
# Which Castle Game Engine tag/branch to use for building.
# This *should* be "snapshot", which is our latest CGE that passed automatic tests.
# But for quick hotfix in exceptional situation, you may want to use "master"
# or any other branch/tag.
engine_tag: master
defaults:
run:
shell: bash
jobs:
build_docker:
name: Build From Docker
runs-on: ubuntu-latest
# We could use a Docker container with cge-unstable, so it already contains
# CGE (with build tool) set up. This way we know we only use CGE that
# passed automatic tests, we have castle-engine on the PATH, and things are easy.
#
# Later: But to make engine_tag configurable, we instead get CGE from GitHub.
#container: kambi/castle-engine-cloud-builds-tools:cge-unstable
container: kambi/castle-engine-cloud-builds-tools:cge-none
steps:
- uses: actions/checkout@v4
# Older version of this workflow used to clone CGE and build it.
# Setup Castle Game Engine
- name: Castle Game Engine - Env CASTLE_ENGINE_PATH
run: echo "CASTLE_ENGINE_PATH=$GITHUB_WORKSPACE/castle-engine" >> $GITHUB_ENV
- name: Castle Game Engine - Env PATH (non-Windows)
run: echo "PATH=$PATH:$CASTLE_ENGINE_PATH/tools/build-tool/" >> $GITHUB_ENV
- name: Castle Game Engine - Clone snapshot
run: git clone --depth 1 --single-branch --branch ${{ env.engine_tag }} https://github.com/castle-engine/castle-engine/
- name: Castle Game Engine - Build
run: cd $CASTLE_ENGINE_PATH/tools/build-tool/ && ./castle-engine_compile.sh
# Package application:
# - castle-model-converter first, it will be packaged in castle-model-viewer CastleEngineManifest.xml
# - then build and package castle-model-viewer
- name: Package Windows / x86_64
run: |
castle-engine compile --os=win64 --cpu=x86_64 --manifest-name=CastleEngineManifest.converter.xml
castle-engine package --os=win64 --cpu=x86_64
- name: Package Windows / i386
run: |
# We need "make clean" to be sure to remove previous build artifacts, e.g. castle-model-converter.exe
make clean
castle-engine compile --os=win32 --cpu=i386 --manifest-name=CastleEngineManifest.converter.xml
castle-engine package --os=win32 --cpu=i386
- name: Package Linux / x86_64
run: |
# We need "make clean" to be sure to remove previous build artifacts, e.g. castle-model-converter.exe
make clean
castle-engine compile --os=linux --cpu=x86_64 --manifest-name=CastleEngineManifest.converter.xml
castle-engine package --os=linux --cpu=x86_64
- name: Archive Artifacts
uses: actions/upload-artifact@v4
with:
name: windows-linux-builds
path: |
*.zip
*.tar.gz
#if-no-files-found: error
build_runner_native:
name: Build on Native Runner (target OS/CPU = source OS/CPU)
strategy:
matrix:
runner: [macos_x64, raspberry_pi_64, raspberry_pi_32]
runs-on: ${{ matrix.runner }}
steps:
- uses: actions/checkout@v4
# Setup Castle Game Engine
- name: Castle Game Engine - Env CASTLE_ENGINE_PATH
run: echo "CASTLE_ENGINE_PATH=$GITHUB_WORKSPACE/castle-engine" >> $GITHUB_ENV
- name: Castle Game Engine - Env BUILD_TOOL
run: echo "BUILD_TOOL=$CASTLE_ENGINE_PATH/tools/build-tool/castle-engine" >> $GITHUB_ENV
- name: Castle Game Engine - Clone snapshot
run: git clone --depth 1 --single-branch --branch ${{ env.engine_tag }} https://github.com/castle-engine/castle-engine/
- name: Castle Game Engine - Build
run: cd $CASTLE_ENGINE_PATH/tools/build-tool/ && ./castle-engine_compile.sh
# Package application
- name: Package (non macOS)
if: ${{ matrix.runner != 'macos_x64' }}
run: |
${BUILD_TOOL} compile --manifest-name=CastleEngineManifest.converter.xml
${BUILD_TOOL} package
- name: Package (macOS)
if: ${{ matrix.runner == 'macos_x64' }}
# Special order for macOS:
# - First compile and package castle-model-viewer, it will be a bundle.
# - Add 2nd exe "castle-model-converter" to the bundle.
# - zip it manually
# (TODO: we could add file to zip created by initial "package" instead?)
run: |
${BUILD_TOOL} compile --manifest-name=CastleEngineManifest.converter.xml
${BUILD_TOOL} package --package-format=mac-app-bundle
cp castle-model-converter castle-model-viewer.app/Contents/MacOS/
VERSION=`castle-engine output version`
ZIPNAME=castle-model-viewer-"${VERSION}"-darwin-x86_64.zip
zip -r "${ZIPNAME}" castle-model-viewer.app/
echo "Packed to ${ZIPNAME}"
- name: Archive Artifacts
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.runner }}-build
path: |
*.zip
*.tar.gz
#if-no-files-found: error
release:
name: Release
runs-on: ubuntu-latest
# Only upload release if all builds, on all runners, succeeded.
needs: [build_docker, build_runner_native]
steps:
- name: Download packaged releases
uses: actions/download-artifact@v4
with:
merge-multiple: true
- name: List downloaded files
run: ls -R
- name: GH CLI status
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: gh auth status
# Releases files in the GitHub release.
- name: Release Artifacts
if: ${{ github.ref == 'refs/heads/master' }}
run: gh release --repo ${{ github.repository }} upload ${{ env.release_tag }} --clobber *.zip *.tar.gz
env:
GH_TOKEN: ${{ github.token }}
update-release-tag:
name: Update Release Tag (make release tag point to the build commit on master branch)
runs-on: ubuntu-latest
needs: [release]
steps:
- uses: actions/checkout@v4
- name: Update Release Tag
if: ${{ github.ref == 'refs/heads/master' }}
run: |
# --force allows to overwrite previous tag
git tag --force ${{ env.release_tag }}
# --force allows to push with overwritten tag
git push --force origin ${{ env.release_tag }}