From fd48e0e23a6eee6b02a20b7f4799490a03fc7d1b Mon Sep 17 00:00:00 2001 From: Shelikhoo Date: Tue, 14 Feb 2023 23:46:45 +0000 Subject: [PATCH] Add container build file --- .github/workflows/release.yml | 65 +++++++++++++++++++++++++++++ release/container/Containerfile | 19 +++++++++ release/container/downloadAssets.sh | 45 ++++++++++++++++++++ 3 files changed, 129 insertions(+) create mode 100644 release/container/Containerfile create mode 100644 release/container/downloadAssets.sh diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d982b57f393..9713479eb0f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -256,3 +256,68 @@ jobs: file_glob: true file: build_artifacts/v2ray-extra.zip tag: ${{ github.ref }} + buildContainer: + if: github.event_name == 'release' + needs: signature + strategy: + fail-fast: false + matrix: + variant: [std, extra] + arch: + - v2Name: 32 + containerName: 386 + - v2Name: 64 + containerName: amd64 + - v2Name: arm32-v6 + containerName: arm/v6 + - v2Name: arm32-v7a + containerName: arm/v7 + - v2Name: arm64-v8a + containerName: arm64 + - v2Name: arm64-v8a + containerName: arm64/v8 + + name: Build And Push image + runs-on: ubuntu-latest + env: + REGISTRY_USER: ${{ github.actor }} + REGISTRY_PASSWORD: ${{ github.token }} + IMAGE_REGISTRY: ghcr.io/${{ github.repository_owner }} + RELEASE_REPO: ${{ github.repository }} + steps: + - uses: actions/checkout@v3 + + - name: Log in to ghcr.io + uses: redhat-actions/podman-login@v1 + with: + username: ${{ env.REGISTRY_USER }} + password: ${{ env.REGISTRY_PASSWORD }} + registry: ${{ env.IMAGE_REGISTRY }} + + - name: Download Assets + run: | + bash ./release/container/downloadAssets.sh ${{ github.ref_name }} ${{ matrix.arch.v2Name }} ${{ matrix.arch.containerName }} ${{ matrix.variant }} + + - name: Buildah Action + id: build-image + uses: redhat-actions/buildah-build@v2 + with: + image: v2ray + tags: ${{ github.ref_name }}-${{ matrix.arch.v2Name }}-${{ matrix.variant }} + containerfiles: | + ./release/container/Containerfile + build-args: | + TARGETPLATFORM=${{ matrix.arch.containerName }} + VARIANT=${{ matrix.variant }} + archs: ${{ matrix.arch.containerName }} + context: context/linux/${{ matrix.arch.containerName }}/${{ matrix.variant }} + extra-args: | + --squash + --timestamp 0 + + - name: Push To ghcr.io + uses: redhat-actions/push-to-registry@v2 + with: + image: ${{ steps.build-image.outputs.image }} + tags: ${{ steps.build-image.outputs.tags }} + registry: ${{ env.IMAGE_REGISTRY }} diff --git a/release/container/Containerfile b/release/container/Containerfile new file mode 100644 index 00000000000..4d76a4dcfe7 --- /dev/null +++ b/release/container/Containerfile @@ -0,0 +1,19 @@ +FROM docker.io/library/golang@sha256:d19ee8512191c8b8e967246d4a7d0de4f4133a30bd9ce982e9b70a0c596dbf18 AS builder + +FROM --platform=${TARGETPLATFORM} scratch + +ARG TARGETPLATFORM +ARG VARIANT + +COPY --from=builder /usr/share/zoneinfo /usr/share/zoneinfo +COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ +COPY --from=builder /etc/passwd /etc/passwd +COPY --from=builder /etc/group /etc/group +COPY --from=builder /tmp /tmp +COPY --from=builder /dev /dev + +ENV v2ray.location.asset=/opt/v2ray/share + +COPY ./ /opt/v2ray/ + +CMD ["/opt/v2ray/bin/v2ray"] diff --git a/release/container/downloadAssets.sh b/release/container/downloadAssets.sh new file mode 100644 index 00000000000..9ec81a0bb75 --- /dev/null +++ b/release/container/downloadAssets.sh @@ -0,0 +1,45 @@ +#!/bin/bash + +set -x -e + +download() { + curl -L "https://github.com/${RELEASE_REPO}/releases/download/$1/$2" >"$2" +} + +downloadAndUnzip() { + download "$1" "$2" + unzip -n -d "${2%\.zip}" "$2" +} +mkdir -p assets + +pushd assets +downloadAndUnzip "$1" "v2ray-linux-$2.zip" +downloadAndUnzip "$1" "v2ray-extra.zip" +popd + +placeFile() { + mkdir -p "context/$2" + cp -R "assets/$1/$3" "context/$2/$3" +} + +function generateStandardVersion() { + placeFile "$1" "$2/bin" "v2ray" +} + +function generateExtraVersion() { + generateStandardVersion "$1" "$2" + placeFile "$1" "$2/share" "geosite.dat" + placeFile "$1" "$2/share" "geoip.dat" + placeFile "$1" "$2/etc" "config.json" + placeFile "v2ray-extra" "$2/share" "browserforwarder" +} + +if [ "$4" = "std" ]; then + generateStandardVersion "v2ray-linux-$2" "linux/$3/std" +fi + +if [ "$4" = "extra" ]; then + generateExtraVersion "v2ray-linux-$2" "linux/$3/extra" +fi + +