github.com/xmplusdev/xmcore@v1.8.11-0.20240412132628-5518b55526af/.github/workflows/release.yml (about)

     1  name: Build and Release
     2  
     3  on:
     4    workflow_dispatch:
     5    release:
     6      types: [published]
     7    push:
     8      branches:
     9        - main
    10      paths:
    11        - "**/*.go"
    12        - "go.mod"
    13        - "go.sum"
    14        - ".github/workflows/*.yml"
    15    pull_request:
    16      types: [opened, synchronize, reopened]
    17      paths:
    18        - "**/*.go"
    19        - "go.mod"
    20        - "go.sum"
    21        - ".github/workflows/*.yml"
    22  jobs:
    23    prepare:
    24      runs-on: ubuntu-latest
    25      steps:
    26        - name: Restore Cache
    27          uses: actions/cache/restore@v4
    28          with:
    29            path: resources
    30            key: xray-geodat-
    31  
    32        - name: Update Geodat
    33          id: update
    34          uses: nick-fields/retry@v3
    35          with:
    36            timeout_minutes: 60
    37            retry_wait_seconds: 60
    38            max_attempts: 60
    39            command: |
    40              [ -d 'resources' ] || mkdir resources
    41              LIST=('geoip geoip geoip' 'domain-list-community dlc geosite')
    42              for i in "${LIST[@]}"
    43              do
    44                INFO=($(echo $i | awk 'BEGIN{FS=" ";OFS=" "} {print $1,$2,$3}'))
    45                FILE_NAME="${INFO[2]}.dat"
    46                echo -e "Verifying HASH key..."
    47                HASH="$(curl -sL "https://raw.githubusercontent.com/v2fly/${INFO[0]}/release/${INFO[1]}.dat.sha256sum" | awk -F ' ' '{print $1}')"
    48                if [ -s "./resources/${FILE_NAME}" ] && [ "$(sha256sum "./resources/${FILE_NAME}" | awk -F ' ' '{print $1}')" == "${HASH}" ]; then
    49                    continue
    50                else
    51                    echo -e "Downloading https://raw.githubusercontent.com/v2fly/${INFO[0]}/release/${INFO[1]}.dat..."
    52                    curl -L "https://raw.githubusercontent.com/v2fly/${INFO[0]}/release/${INFO[1]}.dat" -o ./resources/${FILE_NAME}
    53                    echo -e "Verifying HASH key..."
    54                    [ "$(sha256sum "./resources/${FILE_NAME}" | awk -F ' ' '{print $1}')" == "${HASH}" ] || { echo -e "The HASH key of ${FILE_NAME} does not match cloud one."; exit 1; }
    55                    echo "unhit=true" >> $GITHUB_OUTPUT
    56                fi
    57              done
    58  
    59        - name: Save Cache
    60          uses: actions/cache/save@v4
    61          if: ${{ steps.update.outputs.unhit }}
    62          with:
    63            path: resources
    64            key: xray-geodat-${{ github.sha }}-${{ github.run_number }}
    65  
    66    build:
    67      needs: prepare
    68      permissions:
    69        contents: write
    70      strategy:
    71        matrix:
    72          # Include amd64 on all platforms.
    73          goos: [linux]
    74          goarch: [amd64, 386]
    75          exclude:
    76            # Exclude i386 on darwin and dragonfly.
    77            - goarch: 386
    78              goos: dragonfly
    79            - goarch: 386
    80              goos: darwin
    81          include:
    82            # END MacOS ARM64
    83            # BEGIN Linux ARM 5 6 7
    84            - goos: linux
    85              goarch: arm
    86              goarm: 7
    87            - goos: linux
    88              goarch: arm
    89              goarm: 6
    90            - goos: linux
    91              goarch: arm
    92              goarm: 5
    93            # END Linux ARM 5 6 7
    94        fail-fast: false
    95  
    96      runs-on: ubuntu-latest
    97      env:
    98        GOOS: ${{ matrix.goos }}
    99        GOARCH: ${{ matrix.goarch }}
   100        GOARM: ${{ matrix.goarm }}
   101        CGO_ENABLED: 0
   102      steps:
   103        - name: Checkout codebase
   104          uses: actions/checkout@v4
   105  
   106        - name: Show workflow information 
   107          run: |
   108            export _NAME=$(jq ".[\"$GOOS-$GOARCH$GOARM$GOMIPS\"].friendlyName" -r < .github/build/friendly-filenames.json)
   109            echo "GOOS: $GOOS, GOARCH: $GOARCH, GOARM: $GOARM, GOMIPS: $GOMIPS, RELEASE_NAME: $_NAME"
   110            echo "ASSET_NAME=$_NAME" >> $GITHUB_ENV
   111  
   112        - name: Set up Go
   113          uses: actions/setup-go@v5
   114          with:
   115            go-version-file: go.mod
   116            check-latest: true
   117  
   118        - name: Get project dependencies
   119          run: go mod download
   120        
   121        - name: Build Xray
   122          run: |
   123            mkdir -p build_assets
   124            make
   125            find . -maxdepth 1 -type f -regex '.*\(wxray\|xray\|xray_softfloat\)\(\|.exe\)' -exec mv {} ./build_assets/ \;
   126  
   127        - name: Restore Cache
   128          uses: actions/cache/restore@v4
   129          with:
   130            path: resources
   131            key: xray-geodat-
   132  
   133        - name: Create ZIP archive
   134          shell: bash
   135          run: |
   136            pushd build_assets || exit 1
   137            touch -mt $(date +%Y01010000) *
   138            zip -9vr ../Xray-${{ env.ASSET_NAME }}.zip .
   139            popd || exit 1
   140            FILE=./Xray-${{ env.ASSET_NAME }}.zip
   141            DGST=$FILE.dgst
   142            for METHOD in {"md5","sha1","sha256","sha512"}
   143            do
   144              openssl dgst -$METHOD $FILE | sed 's/([^)]*)//g' >>$DGST
   145            done
   146  
   147        - name: Change the name
   148          run: |
   149            mv build_assets Xray-${{ env.ASSET_NAME }}
   150  
   151        - name: Upload files to Artifacts
   152          uses: actions/upload-artifact@v4
   153          with:
   154            name: Xray-${{ env.ASSET_NAME }}
   155            path: |
   156              ./Xray-${{ env.ASSET_NAME }}/*
   157  
   158        - name: Upload binaries to release
   159          uses: svenstaro/upload-release-action@v2
   160          if: github.event_name == 'release'
   161          with:
   162            repo_token: ${{ secrets.GITHUB_TOKEN }}
   163            file: ./Xray-${{ env.ASSET_NAME }}.zip*
   164            tag: ${{ github.ref }}
   165            file_glob: true