name: Release 3X-ui

on:
  push:
    tags:
      - "*"
  workflow_dispatch:

jobs:
  build:
    strategy:
      matrix:
        platform: [amd64, arm64]
    runs-on: ubuntu-20.04
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4.1.1

      - name: Setup Go
        uses: actions/setup-go@v4.1.0
        with:
          go-version: '1.21'
          
      - name: Install dependencies for arm64
        if: matrix.platform == 'arm64'
        run: |
          sudo apt-get update
          sudo apt install gcc-aarch64-linux-gnu

      - name: Build x-ui
        run: |
          export CGO_ENABLED=1
          export GOOS=linux
          export GOARCH=${{ matrix.platform }}
          if [ "${{ matrix.platform }}" == "arm64" ]; then
            export CC=aarch64-linux-gnu-gcc
          fi
          go build -o xui-release -v main.go
          
          mkdir x-ui
          cp xui-release x-ui/
          cp x-ui.service x-ui/
          cp x-ui.sh x-ui/
          mv x-ui/xui-release x-ui/x-ui
          mkdir x-ui/bin
          cd x-ui/bin
          
          # Download dependencies
          if [ "${{ matrix.platform }}" == "amd64" ]; then
            wget https://github.com/XTLS/Xray-core/releases/download/v1.8.4/Xray-linux-64.zip
            unzip Xray-linux-64.zip
            rm -f Xray-linux-64.zip
          else
            wget https://github.com/XTLS/Xray-core/releases/download/v1.8.4/Xray-linux-arm64-v8a.zip
            unzip Xray-linux-arm64-v8a.zip
            rm -f Xray-linux-arm64-v8a.zip
          fi
          rm -f geoip.dat geosite.dat geoip_IR.dat geosite_IR.dat
          wget https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat
          wget https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat
          wget -O geoip_IR.dat https://github.com/chocolate4u/Iran-v2ray-rules/releases/latest/download/geoip.dat
          wget -O geosite_IR.dat https://github.com/chocolate4u/Iran-v2ray-rules/releases/latest/download/geosite.dat
          mv xray xray-linux-${{ matrix.platform }}
          cd ../..
          
      - name: Package
        run: tar -zcvf x-ui-linux-${{ matrix.platform }}.tar.gz x-ui
        
      - name: Upload
        uses: svenstaro/upload-release-action@2.7.0
        with:
          repo_token: ${{ secrets.GITHUB_TOKEN }}
          tag: ${{ github.ref }}
          file: x-ui-linux-${{ matrix.platform }}.tar.gz
          asset_name: x-ui-linux-${{ matrix.platform }}.tar.gz
          prerelease: true
          overwrite: true