@@ -0,0 +1,192 @@
|
||||
name: build-mesa-git
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
schedule:
|
||||
- cron: "0 3 */3 * *"
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
jobs:
|
||||
build-deb:
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: debian:trixie
|
||||
steps:
|
||||
- name: Install build dependencies
|
||||
run: |
|
||||
apt-get update
|
||||
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
|
||||
build-essential \
|
||||
bindgen \
|
||||
ca-certificates \
|
||||
cbindgen \
|
||||
cmake \
|
||||
curl \
|
||||
dpkg-dev \
|
||||
file \
|
||||
git \
|
||||
glslang-tools \
|
||||
meson \
|
||||
ninja-build \
|
||||
pkg-config \
|
||||
cargo \
|
||||
python3 \
|
||||
python3-mako \
|
||||
python3-ply \
|
||||
python3-yaml \
|
||||
rustc \
|
||||
bison \
|
||||
flex \
|
||||
gettext \
|
||||
libdisplay-info-dev \
|
||||
libdrm-dev \
|
||||
libelf-dev \
|
||||
libexpat1-dev \
|
||||
libgbm-dev \
|
||||
libglvnd-dev \
|
||||
libgles2-mesa-dev \
|
||||
libclc-19 \
|
||||
libclc-19-dev \
|
||||
libllvmspirvlib-19-dev \
|
||||
libpciaccess-dev \
|
||||
libva-dev \
|
||||
libudev-dev \
|
||||
libvulkan-dev \
|
||||
libwayland-dev \
|
||||
libwayland-egl-backend-dev \
|
||||
libx11-dev \
|
||||
libx11-xcb-dev \
|
||||
libxcb-dri2-0-dev \
|
||||
libxcb-dri3-dev \
|
||||
libxcb-glx0-dev \
|
||||
libxcb-keysyms1-dev \
|
||||
libxcb-present-dev \
|
||||
libxcb-randr0-dev \
|
||||
libxcb-shm0-dev \
|
||||
libxcb-sync-dev \
|
||||
libxcb-xfixes0-dev \
|
||||
libxcb1-dev \
|
||||
libxdamage-dev \
|
||||
libxext-dev \
|
||||
libxfixes-dev \
|
||||
libxrandr-dev \
|
||||
libxrender-dev \
|
||||
libxshmfence-dev \
|
||||
libxxf86vm-dev \
|
||||
libzstd-dev \
|
||||
llvm-dev \
|
||||
wayland-protocols \
|
||||
xz-utils \
|
||||
zlib1g-dev
|
||||
- name: Checkout repository
|
||||
run: |
|
||||
git init .
|
||||
git config --global --add safe.directory "$PWD"
|
||||
git remote add origin "${{ gitea.server_url }}/${{ gitea.repository }}.git"
|
||||
git -c http.extraHeader="Authorization: token ${{ secrets.GITEA_TOKEN }}" fetch --depth 1 origin "${{ gitea.sha }}"
|
||||
git checkout --detach FETCH_HEAD
|
||||
- name: Build mesa-git package
|
||||
env:
|
||||
MESA_UPSTREAM_REF: main
|
||||
run: |
|
||||
chmod +x scripts/build-mesa-opt.sh
|
||||
./scripts/build-mesa-opt.sh
|
||||
- name: Generate release notes
|
||||
env:
|
||||
GITEA_SERVER_URL: ${{ gitea.server_url }}
|
||||
GITEA_REPOSITORY: ${{ gitea.repository }}
|
||||
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
|
||||
run: |
|
||||
. dist/package-info.env
|
||||
chmod +x scripts/generate-release-notes.sh
|
||||
RELEASE_TAG="${PACKAGE_NAME}-${PACKAGE_VERSION}" ./scripts/generate-release-notes.sh
|
||||
- name: Generate apt repository
|
||||
run: |
|
||||
chmod +x scripts/generate-apt-repo.sh
|
||||
./scripts/generate-apt-repo.sh
|
||||
- name: Upload deb package to Gitea release
|
||||
run: |
|
||||
. dist/package-info.env
|
||||
RELEASE_TAG="${PACKAGE_NAME}-${PACKAGE_VERSION}"
|
||||
RELEASE_TAG_URL="$(python3 -c 'import sys, urllib.parse; print(urllib.parse.quote(sys.argv[1], safe=""))' "$RELEASE_TAG")"
|
||||
PACKAGE_FILE_URL="$(python3 -c 'import sys, urllib.parse; print(urllib.parse.quote(sys.argv[1], safe=""))' "$PACKAGE_FILE")"
|
||||
RELEASE_API="${{ gitea.server_url }}/api/v1/repos/${{ gitea.repository }}/releases"
|
||||
|
||||
HTTP_CODE="$(curl -s -o /tmp/release.json -w '%{http_code}' \
|
||||
-H "Authorization: token ${{ secrets.GITEA_TOKEN }}" \
|
||||
"${RELEASE_API}/tags/${RELEASE_TAG_URL}")"
|
||||
|
||||
if [ "$HTTP_CODE" = "200" ]; then
|
||||
RELEASE_ID="$(python3 -c 'import json; print(json.load(open("/tmp/release.json"))["id"])')"
|
||||
python3 -c 'import json, pathlib, sys; pathlib.Path("/tmp/release-update.json").write_text(json.dumps({
|
||||
"tag_name": sys.argv[1],
|
||||
"target_commitish": sys.argv[2],
|
||||
"name": sys.argv[1],
|
||||
"body": pathlib.Path("dist/release-notes.md").read_text(),
|
||||
"draft": False,
|
||||
"prerelease": False,
|
||||
}))' "$RELEASE_TAG" "$GITEA_SHA"
|
||||
curl --fail-with-body \
|
||||
-X PATCH \
|
||||
-H "Authorization: token ${{ secrets.GITEA_TOKEN }}" \
|
||||
-H "Content-Type: application/json" \
|
||||
--data-binary @/tmp/release-update.json \
|
||||
"${RELEASE_API}/${RELEASE_ID}" > /tmp/release.json
|
||||
elif [ "$HTTP_CODE" = "404" ]; then
|
||||
python3 -c 'import json, pathlib, sys; pathlib.Path("/tmp/release-create.json").write_text(json.dumps({
|
||||
"tag_name": sys.argv[1],
|
||||
"target_commitish": sys.argv[2],
|
||||
"name": sys.argv[1],
|
||||
"body": pathlib.Path("dist/release-notes.md").read_text(),
|
||||
"draft": False,
|
||||
"prerelease": False,
|
||||
}))' "$RELEASE_TAG" "$GITEA_SHA"
|
||||
curl --fail-with-body \
|
||||
-H "Authorization: token ${{ secrets.GITEA_TOKEN }}" \
|
||||
-H "Content-Type: application/json" \
|
||||
--data-binary @/tmp/release-create.json \
|
||||
"${RELEASE_API}" > /tmp/release.json
|
||||
RELEASE_ID="$(python3 -c 'import json; print(json.load(open("/tmp/release.json"))["id"])')"
|
||||
else
|
||||
cat /tmp/release.json
|
||||
exit 1
|
||||
fi
|
||||
|
||||
curl --fail-with-body \
|
||||
-H "Authorization: token ${{ secrets.GITEA_TOKEN }}" \
|
||||
--data-binary @"dist/${PACKAGE_FILE}" \
|
||||
"${RELEASE_API}/${RELEASE_ID}/assets?name=${PACKAGE_FILE_URL}"
|
||||
- name: Publish apt repository branch
|
||||
run: |
|
||||
APT_BRANCH="apt"
|
||||
APT_WORKTREE="/tmp/apt-branch"
|
||||
|
||||
rm -rf "${APT_WORKTREE}"
|
||||
git init "${APT_WORKTREE}"
|
||||
git -C "${APT_WORKTREE}" config user.name "gitea-actions"
|
||||
git -C "${APT_WORKTREE}" config user.email "actions@local"
|
||||
git -C "${APT_WORKTREE}" remote add origin "${{ gitea.server_url }}/${{ gitea.repository }}.git"
|
||||
|
||||
if git -C "${APT_WORKTREE}" -c http.extraHeader="Authorization: token ${{ secrets.GITEA_TOKEN }}" fetch --depth 1 origin "${APT_BRANCH}"; then
|
||||
git -C "${APT_WORKTREE}" checkout -B "${APT_BRANCH}" FETCH_HEAD
|
||||
else
|
||||
git -C "${APT_WORKTREE}" checkout --orphan "${APT_BRANCH}"
|
||||
fi
|
||||
|
||||
find "${APT_WORKTREE}" -mindepth 1 -maxdepth 1 ! -name .git -exec rm -rf {} +
|
||||
cp -a dist/aptrepo/. "${APT_WORKTREE}/"
|
||||
|
||||
git -C "${APT_WORKTREE}" add .
|
||||
if git -C "${APT_WORKTREE}" diff --cached --quiet; then
|
||||
echo "apt repository branch already up to date"
|
||||
else
|
||||
git -C "${APT_WORKTREE}" commit -m "Publish apt repository for ${GITEA_SHA}"
|
||||
git -C "${APT_WORKTREE}" -c http.extraHeader="Authorization: token ${{ secrets.GITEA_TOKEN }}" push --force origin "${APT_BRANCH}"
|
||||
fi
|
||||
env:
|
||||
GITEA_SHA: ${{ gitea.sha }}
|
||||
Reference in New Issue
Block a user