name: JT808 CI/CD on: push: branches: - main jobs: build-and-deploy: runs-on: xw-runner steps: - name: Checkout code (git clone) env: CLONE_URL: ${{ gitea.repository.clone_url }} SHA: ${{ gitea.sha }} CLONE_TOKEN: ${{ secrets.CLONE_TOKEN }} run: | set -euo pipefail rm -rf repo mkdir -p repo cd repo if [ -n "${CLONE_TOKEN:-}" ]; then # Some tokens may contain characters like '#', which would break sed if unescaped. SAFE_TOKEN="$(printf '%s' "${CLONE_TOKEN}" | sed -e 's/[&|\\]/\\&/g')" AUTH_URL="$(printf '%s' "${CLONE_URL}" | sed -E "s|^https?://|https://${SAFE_TOKEN}@|")" git clone --no-tags --depth 1 "${AUTH_URL}" . else git clone --no-tags --depth 1 "${CLONE_URL}" . fi git fetch --no-tags --depth 1 origin "${SHA}" git checkout -q "${SHA}" - name: Determine image tag id: vars working-directory: repo run: | REGISTRY_URL='${{ secrets.REGISTRY_URL }}' IMAGE_NAME='${{ secrets.IMAGE_NAME }}' SHA=$(git rev-parse --short HEAD) echo "IMAGE_TAG=${REGISTRY_URL}/${IMAGE_NAME}:${SHA}" >> "$GITHUB_OUTPUT" - name: Build Jar (in Maven container) working-directory: repo run: | docker run --rm \ -v "$PWD":/workspace \ -w /workspace \ maven:3.9.9-eclipse-temurin-17 \ mvn -B clean package -DskipTests - name: Build and push Docker image working-directory: repo run: | docker build --pull -t "${{ steps.vars.outputs.IMAGE_TAG }}" . docker push "${{ steps.vars.outputs.IMAGE_TAG }}" - name: Deploy (same host) run: | docker pull "${{ steps.vars.outputs.IMAGE_TAG }}" || true docker stop jt808-server || true docker rm jt808-server || true docker run -d --name jt808-server -p 8080:8080 -p 20048:20048 "${{ steps.vars.outputs.IMAGE_TAG }}"