name: Build and publish Docker image on: workflow_dispatch: inputs: GOST_VERSION: description: "Version of gost. If empty, the latest version will be used." required: false type: string jobs: build: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v3 - name: Set up QEMU uses: docker/setup-qemu-action@v3 with: image: tonistiigi/binfmt:qemu-v7.0.0 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Log into registry ${{ vars.REGISTRY }} uses: docker/login-action@343f7c4344506bcbf9b4de18042ae17996df046d # v3.0.0 with: registry: ${{ vars.REGISTRY }} username: ${{ vars.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - name: Get gost version id: get-gost-version run: | if [ -z "${{ github.event.inputs.GOST_VERSION }}" ]; then echo "GOST_VERSION=$(curl -H 'authorization: Bearer ${{ secrets.GITHUB_TOKEN }}' -s https://api.github.com/repos/ginuerzh/gost/releases/latest | jq -r '.tag_name' | cut -c 2-)" >> "$GITHUB_OUTPUT" else echo "GOST_VERSION=${{ github.event.inputs.GOST_VERSION }}" >> "$GITHUB_OUTPUT" fi # gost version must be .. - name: Verify gost version id: verify-gost-version run: | if [[ ! "${{ steps.get-gost-version.outputs.GOST_VERSION }}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then echo "Invalid gost version: ${{ steps.get-gost-version.outputs.GOST_VERSION }}" exit 1 fi - name: Get WARP client version id: get-warp-client-version run: | curl -fsSL https://pkg.cloudflareclient.com/pubkey.gpg | sudo gpg --yes --dearmor --output /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg echo "deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflare-client.list sudo apt-get update echo "WARP_VERSION=$(apt-cache show cloudflare-warp | grep '^Version:' | awk '{print $2}' | sed 's/-[0-9]*$//')" >> "$GITHUB_OUTPUT" - name: Build and push uses: docker/build-push-action@v5 with: build-args: | GOST_VERSION=${{ steps.get-gost-version.outputs.GOST_VERSION }} WARP_VERSION=${{ steps.get-warp-client-version.outputs.WARP_VERSION }} COMMIT_SHA=${{ github.sha }} context: . platforms: linux/amd64,linux/arm64 push: true tags: | ${{ vars.REGISTRY }}/${{ vars.IMAGE_NAME }}:latest ${{ vars.REGISTRY }}/${{ vars.IMAGE_NAME }}:${{ steps.get-warp-client-version.outputs.WARP_VERSION }}-${{ steps.get-gost-version.outputs.GOST_VERSION }} ${{ vars.REGISTRY }}/${{ vars.IMAGE_NAME }}:${{ steps.get-warp-client-version.outputs.WARP_VERSION }}-${{ steps.get-gost-version.outputs.GOST_VERSION }}-${{ github.sha }} - name: Build and push slim variant uses: docker/build-push-action@v5 with: build-args: | GOST_VERSION=${{ steps.get-gost-version.outputs.GOST_VERSION }} WARP_VERSION=${{ steps.get-warp-client-version.outputs.WARP_VERSION }} COMMIT_SHA=${{ github.sha }} BASE_IMAGE=debian:bookworm-slim context: . platforms: linux/amd64,linux/arm64 push: true tags: | ${{ vars.REGISTRY }}/${{ vars.IMAGE_NAME }}:slim-latest ${{ vars.REGISTRY }}/${{ vars.IMAGE_NAME }}:slim-${{ steps.get-warp-client-version.outputs.WARP_VERSION }}-${{ steps.get-gost-version.outputs.GOST_VERSION }} ${{ vars.REGISTRY }}/${{ vars.IMAGE_NAME }}:slim-${{ steps.get-warp-client-version.outputs.WARP_VERSION }}-${{ steps.get-gost-version.outputs.GOST_VERSION }}-${{ github.sha }}