[ci] add Docker Hub push and dual-tag support in build workflow

This commit is contained in:
dijunkun
2025-10-27 11:32:48 +08:00
parent 9a49905d1b
commit 0ba48b7ede
2 changed files with 54 additions and 34 deletions

View File

@@ -17,41 +17,46 @@ jobs:
- name: Checkout
uses: actions/checkout@v4
- name: Cache xmake packages
uses: actions/cache@v4
with:
path: $HOME/.xmake/packages
key: ${{ runner.os }}-xmake-${{ hashFiles('**/xmake.lua') }}
restore-keys: |
${{ runner.os }}-xmake-
- name: Install xmake & deps
- name: Build Docker Image
run: |
sudo apt update
sudo apt-get install -y software-properties-common git curl unzip build-essential
sudo add-apt-repository -y ppa:xmake-io/xmake
sudo apt update
sudo apt install -y xmake
xmake --version
IMAGE_NAME=crossdesk-server
IMAGE_TAG=${GITHUB_REF_NAME:-latest}
docker build -t ${IMAGE_NAME}:${IMAGE_TAG} -f docker/Dockerfile .
- name: Build
run: xmake b -vy crossdesk_server
- name: Prepare dist
- name: Save built binary as artifact
run: |
mkdir -p dist
cp build/linux/x86_64/release/crossdesk_server dist/
chmod +x dist/crossdesk_server
docker create --name temp crossdesk-server:${GITHUB_REF_NAME:-latest}
docker cp temp:/crossdesk-server/crossdesk_server ./crossdesk_server
docker rm temp
shell: bash
- name: Upload build artifact (for non-tag pushes too)
uses: actions/upload-artifact@v4
- uses: actions/upload-artifact@v4
with:
name: crossdesk_server
path: dist/crossdesk_server
path: crossdesk_server
- name: Login to Docker Hub
if: startsWith(github.ref, 'refs/tags/')
run: echo "${{ secrets.DOCKERHUB_TOKEN }}" | docker login -u "${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin
- name: Push Docker image to Docker Hub
if: startsWith(github.ref, 'refs/tags/')
run: |
IMAGE_TAG=${GITHUB_REF_NAME}
DOCKER_USER=${{ secrets.DOCKERHUB_USERNAME }}
IMAGE_NAME=${DOCKER_USER}/crossdesk-server
echo "Pushing ${IMAGE_NAME}:${IMAGE_TAG} and ${IMAGE_NAME}:latest"
docker tag crossdesk-server:${IMAGE_TAG} ${IMAGE_NAME}:${IMAGE_TAG}
docker tag crossdesk-server:${IMAGE_TAG} ${IMAGE_NAME}:latest
docker push ${IMAGE_NAME}:${IMAGE_TAG}
docker push ${IMAGE_NAME}:latest
- name: Publish GitHub Release (on tag)
if: startsWith(github.ref, 'refs/tags/')
uses: softprops/action-gh-release@v2
with:
files: dist/crossdesk_server
files: crossdesk_server
generate_release_notes: true

View File

@@ -1,11 +1,25 @@
FROM ubuntu:22.04 AS builder
RUN apt-get update && \
apt-get install -y software-properties-common git curl unzip build-essential && \
add-apt-repository -y ppa:xmake-io/xmake && \
apt-get update && \
apt-get install -y xmake && \
xmake --version --root
WORKDIR /src
COPY . .
RUN xmake b -vy --root crossdesk_server && \
mkdir -p /output && \
cp build/linux/x86_64/release/crossdesk_server /output/
FROM crossdesk/crossdesk-server-base:latest
# create certificate directory and generate a self-signed TLS certificate
RUN mkdir -p /opt/turnserver && \
cd /opt/turnserver && \
# generate private key
openssl genrsa -out turn_server_pkey.pem 2048 && \
# generate self-signed certificate (valid for 10 years)
openssl req -x509 -new -nodes \
-key turn_server_pkey.pem \
-sha256 -days 3650 \
@@ -13,9 +27,10 @@ RUN mkdir -p /opt/turnserver && \
-out turn_server_cert.pem && \
chmod 600 /opt/turnserver/turn_server_pkey.pem
# copy entrypoint script into the image
COPY start.sh /start.sh
RUN chmod +x /start.sh
# Set the container entrypoint
ENTRYPOINT ["/start.sh"]
COPY docker/start.sh /start.sh
COPY --from=builder /output/crossdesk_server /crossdesk-server/crossdesk_server
RUN chmod +x /start.sh /crossdesk-server/crossdesk_server
ENTRYPOINT ["/start.sh"]