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 }}