mirror of
https://github.com/sol1/rustguac.git
synced 2026-09-11 13:50:14 +00:00
8945a33208
ci: bump docker/build-push-action from 6 to 7
378 lines
13 KiB
YAML
378 lines
13 KiB
YAML
name: Release
|
|
|
|
on:
|
|
push:
|
|
tags: ["v*"]
|
|
|
|
permissions:
|
|
contents: write
|
|
|
|
env:
|
|
GUACD_REPO: https://github.com/apache/guacamole-server.git
|
|
|
|
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 --depth 1 $GUACD_REPO /tmp/guacamole-server
|
|
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 .rpm package (Rocky Linux 9)
|
|
# ---------------------------------------------------------------------------
|
|
build-rpm:
|
|
name: Build .rpm
|
|
runs-on: ubuntu-latest
|
|
container: rockylinux:9
|
|
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
|
|
- name: Install build dependencies
|
|
run: |
|
|
dnf install -y epel-release
|
|
dnf config-manager --set-enabled crb
|
|
dnf install -y --allowerasing \
|
|
gcc gcc-c++ make git curl pkgconfig \
|
|
autoconf automake libtool \
|
|
cairo-devel libjpeg-turbo-devel libpng-devel libwebp-devel \
|
|
libssh2-devel openssl-devel libvncserver-devel \
|
|
pango-devel pulseaudio-libs-devel \
|
|
ffmpeg-free-devel libtelnet-devel libwebsockets-devel \
|
|
libuuid-devel freerdp-devel \
|
|
rpm-build systemd-rpm-macros
|
|
|
|
- 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 --depth 1 $GUACD_REPO /tmp/guacamole-server
|
|
for patch in patches/*.patch; do
|
|
[ -f "$patch" ] || continue
|
|
echo "Applying: $patch"
|
|
git -C /tmp/guacamole-server apply "$GITHUB_WORKSPACE/$patch" || true
|
|
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/rpm/staging" install
|
|
|
|
- name: Build rustguac
|
|
run: $HOME/.cargo/bin/cargo build --release
|
|
|
|
- name: Build .rpm package
|
|
run: |
|
|
VERSION=$(grep '^version' Cargo.toml | head -1 | sed 's/.*"\(.*\)".*/\1/')
|
|
RPMBUILD_DIR="$HOME/rpmbuild"
|
|
mkdir -p "$RPMBUILD_DIR/BUILD" "$RPMBUILD_DIR/RPMS" "$RPMBUILD_DIR/SOURCES" "$RPMBUILD_DIR/SPECS" "$RPMBUILD_DIR/SRPMS"
|
|
rpmbuild -bb \
|
|
--define "_topdir $RPMBUILD_DIR" \
|
|
--define "_builddir $(pwd)" \
|
|
--define "_version $VERSION" \
|
|
./rustguac.spec
|
|
cp "$RPMBUILD_DIR"/RPMS/*/*.rpm .
|
|
|
|
- name: Upload .rpm artifact
|
|
uses: actions/upload-artifact@v7
|
|
with:
|
|
name: rpm-package
|
|
path: "*.rpm"
|
|
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 --depth 1 $GUACD_REPO /tmp/guacamole-server
|
|
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-rpm, 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 rpm artifact
|
|
uses: actions/download-artifact@v8
|
|
with:
|
|
name: rpm-package
|
|
path: artifacts/rpm-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/rpm-package/*.rpm
|
|
artifacts/tarball/*.tar.gz
|
|
artifacts/tarball-arm64/*.tar.gz
|