| 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 |
|
|
| - name: Set up Docker Buildx |
| uses: docker/setup-buildx-action@v3 |
|
|
| - name: Log into registry ${{ vars.REGISTRY }} |
| uses: docker/login-action@343f7c4344506bcbf9b4de18042ae17996df046d |
| 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 |
| |
| |
| - 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 }} |
| |