mirror of
https://github.com/sol1/rustguac.git
synced 2026-09-11 13:50:14 +00:00
faf941eb06
Upstream GUACAMOLE-2221 introduced -Werror=maybe-uninitialized failure. Pin all build paths (CI, Dockerfile, install.sh) to last known-good commit. Update guacd version deliberately, not on every upstream push.
303 lines
11 KiB
YAML
303 lines
11 KiB
YAML
name: Release
|
|
|
|
on:
|
|
push:
|
|
tags: ["v*"]
|
|
|
|
permissions:
|
|
contents: write
|
|
|
|
env:
|
|
GUACD_REPO: https://github.com/apache/guacamole-server.git
|
|
GUACD_COMMIT: 2980cf0 # Pin to known-good commit (before GUACAMOLE-2221 broke -Werror)
|
|
|
|
jobs:
|
|
# ---------------------------------------------------------------------------
|
|
# Build .deb package (Debian 13 / Trixie)
|
|
# ---------------------------------------------------------------------------
|
|
build-deb:
|
|
name: Build .deb
|
|
runs-on: ubuntu-latest
|
|
container: debian:trixie
|
|
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
|
|
- name: Install build dependencies
|
|
run: |
|
|
apt-get update
|
|
apt-get install -y --no-install-recommends \
|
|
curl ca-certificates gcc g++ pkg-config make git \
|
|
autoconf automake libtool \
|
|
libcairo2-dev libjpeg-dev libpng-dev libwebp-dev \
|
|
libssh2-1-dev libssl-dev libvncserver-dev \
|
|
libpango1.0-dev libpulse-dev \
|
|
libavcodec-dev libavformat-dev libavutil-dev libswscale-dev \
|
|
libcunit1-dev libtelnet-dev libwebsockets-dev \
|
|
uuid-dev freerdp3-dev \
|
|
dpkg-dev debhelper fakeroot build-essential
|
|
|
|
- name: Install Rust
|
|
run: |
|
|
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
|
|
echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
|
|
|
|
- name: Clone and build guacd
|
|
run: |
|
|
git clone $GUACD_REPO /tmp/guacamole-server && git -C /tmp/guacamole-server checkout $GUACD_COMMIT
|
|
for patch in patches/*.patch; do
|
|
[ -f "$patch" ] || continue
|
|
echo "Applying: $patch"
|
|
git -C /tmp/guacamole-server apply "$GITHUB_WORKSPACE/$patch"
|
|
done
|
|
cd /tmp/guacamole-server && autoreconf -fi
|
|
mkdir /tmp/guacd-build && cd /tmp/guacd-build
|
|
/tmp/guacamole-server/configure \
|
|
--prefix=/opt/rustguac \
|
|
--with-ssh --with-vnc --with-rdp \
|
|
--without-telnet --without-kubernetes \
|
|
--disable-guacenc --disable-guaclog --disable-static
|
|
make -j"$(nproc)"
|
|
make DESTDIR="$GITHUB_WORKSPACE/debian/staging" install
|
|
|
|
- name: Build rustguac
|
|
run: $HOME/.cargo/bin/cargo build --release
|
|
|
|
- name: Build .deb package
|
|
run: |
|
|
VERSION=$(grep '^version' Cargo.toml | head -1 | sed 's/.*"\(.*\)".*/\1/')
|
|
GIT_HASH=$(echo "$GITHUB_SHA" | cut -c1-7)
|
|
DEB_VERSION="${VERSION}+g${GIT_HASH}"
|
|
cat > debian/changelog <<EOF
|
|
rustguac (${DEB_VERSION}) unstable; urgency=medium
|
|
|
|
* Release ${GITHUB_REF_NAME}
|
|
|
|
-- rustguac build <rustguac@localhost> $(date -R)
|
|
EOF
|
|
dpkg-buildpackage -us -uc -b
|
|
# dpkg-buildpackage puts .deb in parent dir; copy to workspace for upload
|
|
cp ../*.deb .
|
|
|
|
- name: Upload .deb artifact
|
|
uses: actions/upload-artifact@v7
|
|
with:
|
|
name: deb-package
|
|
path: "*.deb"
|
|
if-no-files-found: error
|
|
|
|
# Also build tarball from the same environment
|
|
- name: Build release tarball
|
|
run: |
|
|
VERSION=$(grep '^version' Cargo.toml | head -1 | sed 's/.*"\(.*\)".*/\1/')
|
|
TAG_VERSION="${GITHUB_REF_NAME#v}"
|
|
TARBALL_DIR="/tmp/rustguac-${TAG_VERSION}-linux-amd64"
|
|
mkdir -p "$TARBALL_DIR/bin" "$TARBALL_DIR/sbin" "$TARBALL_DIR/lib" "$TARBALL_DIR/static" "$TARBALL_DIR/systemd"
|
|
|
|
cp target/release/rustguac "$TARBALL_DIR/bin/"
|
|
cp debian/staging/opt/rustguac/sbin/guacd "$TARBALL_DIR/sbin/"
|
|
cp -a debian/staging/opt/rustguac/lib/*.so* "$TARBALL_DIR/lib/"
|
|
cp -r static/* "$TARBALL_DIR/static/"
|
|
cp debian/config.toml.default "$TARBALL_DIR/config.toml.default"
|
|
cp debian/rustguac.service "$TARBALL_DIR/systemd/"
|
|
cp debian/rustguac-guacd.service "$TARBALL_DIR/systemd/"
|
|
cp install-release.sh "$TARBALL_DIR/install.sh"
|
|
chmod +x "$TARBALL_DIR/install.sh"
|
|
[ -d scripts ] && cp -r scripts "$TARBALL_DIR/" || true
|
|
|
|
cd /tmp
|
|
tar czf "$GITHUB_WORKSPACE/rustguac-${TAG_VERSION}-linux-amd64.tar.gz" \
|
|
"rustguac-${TAG_VERSION}-linux-amd64"
|
|
|
|
- name: Upload tarball artifact
|
|
uses: actions/upload-artifact@v7
|
|
with:
|
|
name: tarball
|
|
path: rustguac-*-linux-amd64.tar.gz
|
|
if-no-files-found: error
|
|
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Build .deb + tarball (ARM64 / Debian 13)
|
|
# ---------------------------------------------------------------------------
|
|
build-deb-arm64:
|
|
name: Build .deb (arm64)
|
|
runs-on: ubuntu-24.04-arm
|
|
container: debian:trixie
|
|
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
|
|
- name: Install build dependencies
|
|
run: |
|
|
apt-get update
|
|
apt-get install -y --no-install-recommends \
|
|
curl ca-certificates gcc g++ pkg-config make git \
|
|
autoconf automake libtool \
|
|
libcairo2-dev libjpeg-dev libpng-dev libwebp-dev \
|
|
libssh2-1-dev libssl-dev libvncserver-dev \
|
|
libpango1.0-dev libpulse-dev \
|
|
libavcodec-dev libavformat-dev libavutil-dev libswscale-dev \
|
|
libcunit1-dev libtelnet-dev libwebsockets-dev \
|
|
uuid-dev freerdp3-dev \
|
|
dpkg-dev debhelper fakeroot build-essential
|
|
|
|
- name: Install Rust
|
|
run: |
|
|
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
|
|
echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
|
|
|
|
- name: Clone and build guacd
|
|
run: |
|
|
git clone $GUACD_REPO /tmp/guacamole-server && git -C /tmp/guacamole-server checkout $GUACD_COMMIT
|
|
for patch in patches/*.patch; do
|
|
[ -f "$patch" ] || continue
|
|
echo "Applying: $patch"
|
|
git -C /tmp/guacamole-server apply "$GITHUB_WORKSPACE/$patch"
|
|
done
|
|
cd /tmp/guacamole-server && autoreconf -fi
|
|
mkdir /tmp/guacd-build && cd /tmp/guacd-build
|
|
/tmp/guacamole-server/configure \
|
|
--prefix=/opt/rustguac \
|
|
--with-ssh --with-vnc --with-rdp \
|
|
--without-telnet --without-kubernetes \
|
|
--disable-guacenc --disable-guaclog --disable-static
|
|
make -j"$(nproc)"
|
|
make DESTDIR="$GITHUB_WORKSPACE/debian/staging" install
|
|
|
|
- name: Build rustguac
|
|
run: $HOME/.cargo/bin/cargo build --release
|
|
|
|
- name: Build .deb package
|
|
run: |
|
|
VERSION=$(grep '^version' Cargo.toml | head -1 | sed 's/.*"\(.*\)".*/\1/')
|
|
GIT_HASH=$(echo "$GITHUB_SHA" | cut -c1-7)
|
|
DEB_VERSION="${VERSION}+g${GIT_HASH}"
|
|
cat > debian/changelog <<EOF
|
|
rustguac (${DEB_VERSION}) unstable; urgency=medium
|
|
|
|
* Release ${GITHUB_REF_NAME}
|
|
|
|
-- rustguac build <rustguac@localhost> $(date -R)
|
|
EOF
|
|
dpkg-buildpackage -us -uc -b
|
|
cp ../*.deb .
|
|
|
|
- name: Upload .deb artifact
|
|
uses: actions/upload-artifact@v7
|
|
with:
|
|
name: deb-package-arm64
|
|
path: "*.deb"
|
|
if-no-files-found: error
|
|
|
|
- name: Build release tarball
|
|
run: |
|
|
TAG_VERSION="${GITHUB_REF_NAME#v}"
|
|
TARBALL_DIR="/tmp/rustguac-${TAG_VERSION}-linux-arm64"
|
|
mkdir -p "$TARBALL_DIR/bin" "$TARBALL_DIR/sbin" "$TARBALL_DIR/lib" "$TARBALL_DIR/static" "$TARBALL_DIR/systemd"
|
|
|
|
cp target/release/rustguac "$TARBALL_DIR/bin/"
|
|
cp debian/staging/opt/rustguac/sbin/guacd "$TARBALL_DIR/sbin/"
|
|
cp -a debian/staging/opt/rustguac/lib/*.so* "$TARBALL_DIR/lib/"
|
|
cp -r static/* "$TARBALL_DIR/static/"
|
|
cp debian/config.toml.default "$TARBALL_DIR/config.toml.default"
|
|
cp debian/rustguac.service "$TARBALL_DIR/systemd/"
|
|
cp debian/rustguac-guacd.service "$TARBALL_DIR/systemd/"
|
|
cp install-release.sh "$TARBALL_DIR/install.sh"
|
|
chmod +x "$TARBALL_DIR/install.sh"
|
|
[ -d scripts ] && cp -r scripts "$TARBALL_DIR/" || true
|
|
|
|
cd /tmp
|
|
tar czf "$GITHUB_WORKSPACE/rustguac-${TAG_VERSION}-linux-arm64.tar.gz" \
|
|
"rustguac-${TAG_VERSION}-linux-arm64"
|
|
|
|
- name: Upload tarball artifact
|
|
uses: actions/upload-artifact@v7
|
|
with:
|
|
name: tarball-arm64
|
|
path: rustguac-*-linux-arm64.tar.gz
|
|
if-no-files-found: error
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Build and push Docker image (amd64 + arm64)
|
|
# ---------------------------------------------------------------------------
|
|
build-docker:
|
|
name: Build Docker image
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
|
|
- name: Set up QEMU (for ARM64 cross-build)
|
|
uses: docker/setup-qemu-action@v4
|
|
|
|
- name: Set up Docker Buildx
|
|
uses: docker/setup-buildx-action@v4
|
|
|
|
- name: Log in to Docker Hub
|
|
uses: docker/login-action@v4
|
|
with:
|
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
|
|
- name: Extract version from tag
|
|
id: version
|
|
run: echo "version=${GITHUB_REF_NAME#v}" >> "$GITHUB_OUTPUT"
|
|
|
|
- name: Build and push (amd64 + arm64)
|
|
uses: docker/build-push-action@v7
|
|
with:
|
|
context: .
|
|
platforms: linux/amd64,linux/arm64
|
|
push: true
|
|
tags: |
|
|
sol1/rustguac:${{ steps.version.outputs.version }}
|
|
sol1/rustguac:latest
|
|
cache-from: type=gha
|
|
cache-to: type=gha,mode=max
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Create GitHub Release
|
|
# ---------------------------------------------------------------------------
|
|
release:
|
|
name: Create Release
|
|
needs: [build-deb, build-deb-arm64, build-docker]
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
|
|
- name: Download deb artifact
|
|
uses: actions/download-artifact@v8
|
|
with:
|
|
name: deb-package
|
|
path: artifacts/deb-package
|
|
|
|
- name: Download tarball artifact
|
|
uses: actions/download-artifact@v8
|
|
with:
|
|
name: tarball
|
|
path: artifacts/tarball
|
|
|
|
- name: Download deb artifact (arm64)
|
|
uses: actions/download-artifact@v8
|
|
with:
|
|
name: deb-package-arm64
|
|
path: artifacts/deb-package-arm64
|
|
|
|
- name: Download tarball artifact (arm64)
|
|
uses: actions/download-artifact@v8
|
|
with:
|
|
name: tarball-arm64
|
|
path: artifacts/tarball-arm64
|
|
|
|
- name: Create GitHub Release
|
|
uses: softprops/action-gh-release@v2
|
|
with:
|
|
generate_release_notes: true
|
|
files: |
|
|
artifacts/deb-package/*.deb
|
|
artifacts/deb-package-arm64/*.deb
|
|
artifacts/tarball/*.tar.gz
|
|
artifacts/tarball-arm64/*.tar.gz
|