190 lines
7.1 KiB
YAML
190 lines
7.1 KiB
YAML
name: build-mesa-git
|
|
|
|
on:
|
|
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 }}
|