ci(gitea): build branches and release prod

This commit is contained in:
2026-06-18 19:26:44 -05:00
parent 4d6488a19d
commit 8abd86114a

View File

@@ -0,0 +1,94 @@
name: Build Windows EXE
on:
push:
branches:
- "**"
jobs:
build-windows:
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@v4
with:
submodules: recursive
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y mingw-w64 cmake ninja-build curl jq
- name: Create MinGW toolchain
run: |
cat > mingw-toolchain.cmake <<'EOF'
set(CMAKE_SYSTEM_NAME Windows)
set(CMAKE_SYSTEM_PROCESSOR x86_64)
set(CMAKE_C_COMPILER x86_64-w64-mingw32-gcc)
set(CMAKE_CXX_COMPILER x86_64-w64-mingw32-g++)
set(CMAKE_RC_COMPILER x86_64-w64-mingw32-windres)
set(CMAKE_FIND_ROOT_PATH /usr/x86_64-w64-mingw32)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
EOF
- name: Configure Windows release build
run: |
cmake -S . -B build-win -G Ninja \
-DCMAKE_TOOLCHAIN_FILE=mingw-toolchain.cmake \
-DCMAKE_BUILD_TYPE=Release
- name: Build Windows executable
run: cmake --build build-win --parallel
- name: Prepare artifact
run: |
mkdir -p dist
cp build-win/bin/gitree.exe dist/Gitree-windows-x64.exe
- name: Upload Windows build
uses: actions/upload-artifact@v3
with:
name: Gitree-windows-x64
path: dist/Gitree-windows-x64.exe
if-no-files-found: error
- name: Create prod release
if: ${{ gitea.ref_name == 'prod' }}
env:
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
GITEA_SERVER_URL: ${{ gitea.server_url }}
GITEA_REPOSITORY: ${{ gitea.repository }}
GITEA_SHA: ${{ gitea.sha }}
GITEA_RUN_NUMBER: ${{ gitea.run_number }}
run: |
if [ -z "$GITEA_TOKEN" ]; then
echo "The repository secret GITEA_TOKEN is required to publish prod releases."
exit 1
fi
short_sha="$(printf '%s' "$GITEA_SHA" | cut -c1-7)"
tag="prod-${GITEA_RUN_NUMBER}-${short_sha}"
api="${GITEA_SERVER_URL%/}/api/v1/repos/${GITEA_REPOSITORY}"
payload="$(jq -n \
--arg tag "$tag" \
--arg sha "$GITEA_SHA" \
--arg name "Gitree ${tag}" \
'{tag_name: $tag, target_commitish: $sha, name: $name, body: "Automated Windows release from the prod branch.", draft: false, prerelease: false}')"
release="$(curl --fail-with-body --silent --show-error \
-X POST \
-H "Authorization: token ${GITEA_TOKEN}" \
-H "Content-Type: application/json" \
--data "$payload" \
"${api}/releases")"
release_id="$(printf '%s' "$release" | jq -er '.id')"
curl --fail-with-body --silent --show-error \
-X POST \
-H "Authorization: token ${GITEA_TOKEN}" \
-F "attachment=@dist/Gitree-windows-x64.exe" \
"${api}/releases/${release_id}/assets?name=Gitree-windows-x64.exe"