瀏覽代碼

new build method and github actions usage

crocandr 2 年之前
父節點
當前提交
e8a2dd3bb8
共有 2 個文件被更改,包括 86 次插入36 次删除
  1. 77 33
      .github/workflows/main.yml
  2. 9 3
      Dockerfile

+ 77 - 33
.github/workflows/main.yml

@@ -18,16 +18,13 @@ on:
 # A workflow run is made up of one or more jobs that can run sequentially or in parallel
 jobs:
   # This workflow contains a single job called "build"
-  build:
+  build-amd64:
     # The type of runner that the job will run on
     runs-on: ubuntu-latest
-
     # Steps represent a sequence of tasks that will be executed as part of the job
     steps:
       # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
       - uses: actions/checkout@v3
-
-      # Runs a set of commands using the runners shell
       - name: get latest url
         run: |
           BASE_URL="https://www.softether-download.com"
@@ -39,42 +36,89 @@ jobs:
             echo -e "\nURL for $FOLDER_STRING: " 
             echo "$BASE_URL/$LATEST" | tee latest_url-$FOLDER_STRING.txt
           done
-      - name: build container
+      - name: build image - AMD64
+        env:
+          ARCH: AMD64
+        run: |
+          LATEST_URL=$( cat latest_url-*$ARCH*.txt )
+          echo "Latest URL: $LATEST_URL"
+          [ -z "$LATEST_URL" ] && { echo "Latest url not found"; exit 1; }
+          curl -L -o files/softether.tar.gz "$LATEST_URL"
+          ls -hal files/softether.tar.gz
+          SOFTETHER_VERSION=$( basename $LATEST_URL | sed "s@softether-vpnserver-@@g" | cut -f1-3 -d'-' )
+          echo "Softether version: $SOFTETHER_VERSION"
+          [ -z "$SOFTETHER_VERSION" ] && { echo "Softether version not defined"; exit 1; }
+          echo -e "\n\nDockerfile:\n$( cat Dockerfile )\n\n"
+
+          docker build --rm -t croc/softether -f Dockerfile . || { echo "Docker image build fail"; exit 1; }
+          docker tag croc/softether croc/softether:$SOFTETHER_VERSION
+      - name: push container
+        env:
+          DOCKERHUB_USER: ${{ secrets.DOCKERHUB_USER }}
+          DOCKERHUB_PASS: ${{ secrets.DOCKERHUB_PASS }}
+        run: |
+          docker images
+          echo "$DOCKERHUB_PASS" | docker login --username=$DOCKERHUB_USER --password-stdin
+          docker images | grep -i softether
+          # push latest images
+          docker push croc/softether || { echo "latest image push error"; exit 1; }
+          # push version
+          VERSION=$( docker images | grep -i croc/softether | awk '{ print $2 }' | grep -i '^v' | sort | uniq )
+          echo "Image version: $VERSION"
+          docker push croc/softether:$VERSION || { echo "version ($VERSION) image push error"; exit 1; }
+  build-arm64:
+    # The type of runner that the job will run on
+    runs-on: ubuntu-latest
+    # Steps represent a sequence of tasks that will be executed as part of the job
+    steps:
+      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
+      - uses: actions/checkout@v3
+      - name: get latest url
         run: |
-          for ARCH in "AMD64" "ARM"
+          BASE_URL="https://www.softether-download.com"
+          LATEST_FOLDER=$( curl -s $BASE_URL/files/softether/ | tr ';' '\n' | grep -i href | awk -F'"' '{ print $2 }' | sort -n | tail -n1 )
+          echo "Latest folder is $LATEST_FOLDER"
+          for FOLDER_STRING in "Intel_x64_or_AMD64" "ARM_64bit"
           do
-            echo "Creating container for $ARCH ..."
-            cp -f Dockerfile Dockerfile-$ARCH
-            LATEST_URL=$( cat latest_url-*$ARCH*.txt )
-            echo "Latest URL: $LATEST_URL"
-            [ -z "$LATEST_URL" ] && { echo "Latest url not found"; exit 1; }
-            curl -L -o files/softether.tar.gz "$LATEST_URL"
-            ls -hal files/softether.tar.gz
-            SOFTETHER_VERSION=$( basename $LATEST_URL | sed "s@softether-vpnserver-@@g" | cut -f1-3 -d'-' )
-            echo "Softether version: $SOFTETHER_VERSION"
-            [ -z "$SOFTETHER_VERSION" ] && { echo "Softether version not defined"; exit 1; }
-            echo -e "\n\nDockerfile:\n$( cat Dockerfile-$ARCH )\n\n"
-            case $ARCH in
-              "ARM" )
-                echo "  Using docker buildx method ..." 
-                docker buildx build --rm --platform linux/arm64 -t croc/softether-arm64 -f Dockerfile-$ARCH . 
-                docker tag croc/softether croc/softether-arm64:$SOFTETHER_VERSION
-                ;;
-              * )
-                echo "  Using normal docker build method ..." 
-                docker build -t croc/softether -f Dockerfile-$ARCH .
-                docker tag croc/softether croc/softether:$SOFTETHER_VERSION
-                ;;
-            esac
-            docker images | grep -i softether
+            LATEST=$( curl -s "$BASE_URL/$LATEST_FOLDER/Linux/SoftEther_VPN_Server/64bit_-_$FOLDER_STRING/" | tr '<' '\n' | grep -i href | grep -i tar.gz | awk -F '"' '{ print $2 }' ) 
+            echo -e "\nURL for $FOLDER_STRING: " 
+            echo "$BASE_URL/$LATEST" | tee latest_url-$FOLDER_STRING.txt
           done
+      # buildx with quemu
+      - name: qemu setup for buildx for arm build
+        uses: docker/setup-qemu-action@v2
+      - name: setup buildx for arm build
+        id: buildx
+        uses: docker/setup-buildx-action@v2
+      - name: build image - ARM 64bit
+        env:
+          ARCH: ARM
+        run: |
+          echo "Buildx supported platforms: ${{ steps.buildx.outputs.platforms }}"
+
+          LATEST_URL=$( cat latest_url-*$ARCH*.txt )
+          echo "Latest URL: $LATEST_URL"
+          [ -z "$LATEST_URL" ] && { echo "Latest url not found"; exit 1; }
+          curl -L -o files/softether.tar.gz "$LATEST_URL"
+          ls -hal files/softether.tar.gz
+          SOFTETHER_VERSION=$( basename $LATEST_URL | sed "s@softether-vpnserver-@@g" | cut -f1-3 -d'-' )
+          echo "Softether version: $SOFTETHER_VERSION"
+          [ -z "$SOFTETHER_VERSION" ] && { echo "Softether version not defined"; exit 1; }
+          echo -e "\n\nDockerfile:\n$( cat Dockerfile )\n\n"
+
+          docker build --rm --platform linux/arm64 -t croc/softether-arm64 -f Dockerfile . || { echo "Docker image build fail - ARM64"; exit 1; }
+          docker tag croc/softether-arm64 croc/softether-arm64:$SOFTETHER_VERSION
       - name: push container
         env:
           DOCKERHUB_USER: ${{ secrets.DOCKERHUB_USER }}
           DOCKERHUB_PASS: ${{ secrets.DOCKERHUB_PASS }}
         run: |
           docker images
-          echo $DOCKERHUB_USER | base64 -w0 -i
-          echo $DOCKERHUB_PASS | base64 -w0 -i
           echo "$DOCKERHUB_PASS" | docker login --username=$DOCKERHUB_USER --password-stdin
-          docker push croc/onedrive
+          docker images | grep -i softether
+          # push latest images
+          docker push croc/softether-arm64 || { echo "latest image push error - arm64"; exit 1; }
+          # push version
+          VERSION=$( docker images | grep -i croc/softether | awk '{ print $2 }' | grep -i '^v' | sort | uniq )
+          echo "Image version: $VERSION"
+          docker push croc/softether-arm64:$VERSION || { echo "version ($VERSION) image push error - arm64"; exit 1; }

+ 9 - 3
Dockerfile

@@ -2,9 +2,15 @@ FROM debian:10
 
 ENV DOWNLOAD_URL https://github.com/SoftEtherVPN/SoftEtherVPN_Stable/releases/download/v4.31-9727-beta/softether-vpnserver-v4.31-9727-beta-2019.11.18-linux-x64-64bit.tar.gz
 
-RUN apt-get update && apt-get install -y curl tar gzip grep make gcc cpp
-RUN curl -L -o /opt/softether.tar.gz $DOWNLOAD_URL && tar xzfp /opt/softether.tar.gz -C /opt 
-RUN cd /opt/vpnserver && make i_read_and_agree_the_license_agreement 
+RUN apt-get update && \
+    apt-get install -y curl tar gzip grep make gcc cpp
+RUN tar xzfp /opt/softether.tar.gz -C /opt && \
+    rm -f /opt/softether.tar.gz
+RUN cd /opt/vpnserver && \
+    ls -hal && \
+    uname -a && cat /etc/os-release && \
+    #make i_read_and_agree_the_license_agreement
+    make
 
 COPY files/* /opt/
 RUN chmod 755 /opt/*.sh