diff --git a/.github/workflows/build-nekoray-cmake.yml b/.github/workflows/build-nekoray-cmake.yml index 78bbf09..360b6ae 100644 --- a/.github/workflows/build-nekoray-cmake.yml +++ b/.github/workflows/build-nekoray-cmake.yml @@ -25,7 +25,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checking out sources - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Go Status run: git ls-files go | xargs cat | sha1sum > go_status - name: Cache Common Download @@ -36,7 +36,7 @@ jobs: key: CommonCache-${{ matrix.cross_os }}-${{ matrix.cross_arch }}-${{ hashFiles('libs/*.sh', 'go_status', '*.txt') }} - name: Install Golang if: steps.cache-common.outputs.cache-hit != 'true' - uses: actions/setup-go@v3 + uses: actions/setup-go@v4 with: go-version: ^1.22 - name: Build golang parts @@ -72,7 +72,7 @@ jobs: ACTIONS_ALLOW_UNSECURE_COMMANDS: true steps: - name: Checking out sources - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: submodules: "recursive" - name: Install MSVC compiler @@ -154,7 +154,7 @@ jobs: - build-go steps: - name: Checking out sources - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Download Artifacts uses: actions/download-artifact@v3 with: diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..78bbf09 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,215 @@ +name: Nekoray build matrix - cmake + +on: + workflow_dispatch: + inputs: + tag: + description: "Release Tag" + required: true + publish: + description: "Publish: If want ignore" + required: false + artifact-pack: + description: "artifact-pack: If want ignore" + required: false +jobs: + build-go: + strategy: + matrix: + cross_os: [windows, linux] + cross_arch: [amd64] + include: + - cross_os: public_res + cross_arch: public_res + fail-fast: false + runs-on: ubuntu-latest + steps: + - name: Checking out sources + uses: actions/checkout@v3 + - name: Go Status + run: git ls-files go | xargs cat | sha1sum > go_status + - name: Cache Common Download + id: cache-common + uses: actions/cache@v3 + with: + path: artifacts.tgz + key: CommonCache-${{ matrix.cross_os }}-${{ matrix.cross_arch }}-${{ hashFiles('libs/*.sh', 'go_status', '*.txt') }} + - name: Install Golang + if: steps.cache-common.outputs.cache-hit != 'true' + uses: actions/setup-go@v3 + with: + go-version: ^1.22 + - name: Build golang parts + if: steps.cache-common.outputs.cache-hit != 'true' + shell: bash + run: | + [ ${{ matrix.cross_os }} == public_res ] || ./libs/get_source.sh + [ ${{ matrix.cross_os }} == public_res ] || GOOS=${{ matrix.cross_os }} GOARCH=${{ matrix.cross_arch }} ./libs/build_go.sh + [ ${{ matrix.cross_os }} == public_res ] || exit 0 + ./libs/build_public_res.sh + - name: Tar files + if: steps.cache-common.outputs.cache-hit != 'true' + run: tar czvf artifacts.tgz ./deployment + - name: Uploading Artifact + uses: actions/upload-artifact@v3 + with: + name: NekoRay-${{ github.sha }}-Common-${{ matrix.cross_os }}-${{ matrix.cross_arch }} + path: artifacts.tgz + build-cpp: + strategy: + matrix: + include: + - platform: windows-2022 + arch: x64 + qt_version: "6.7" + - platform: ubuntu-20.04 + arch: x64 + qt_version: "5.12" + fail-fast: false + + runs-on: ${{ matrix.platform }} + env: + ACTIONS_ALLOW_UNSECURE_COMMANDS: true + steps: + - name: Checking out sources + uses: actions/checkout@v3 + with: + submodules: "recursive" + - name: Install MSVC compiler + if: matrix.platform == 'windows-2022' + uses: ilammy/msvc-dev-cmd@v1 + with: + # 14.1 is for vs2017, 14.2 is vs2019, following the upstream vcpkg build from Qv2ray-deps repo + toolset: 14.2 + arch: ${{ matrix.arch }} + # ========================================================================================================= Qt Install + - name: Windows - Download Custom Qt ${{ matrix.qt_version }} SDK + shell: bash + if: matrix.platform == 'windows-2022' + env: + DL_QT_VER: ${{ matrix.qt_version }} + run: bash ./libs/download_qtsdk_win.sh + # ========================================================================================================= 编译与 Qt 无关的依赖 + - name: Install ninja-build tool + uses: seanmiddleditch/gha-setup-ninja@v3 + - name: Cache Download + id: cache-deps + uses: actions/cache@v3 + with: + path: libs/deps + key: DepsCache-${{ matrix.platform }}-${{ matrix.arch }}-${{ hashFiles('libs/build_deps_*.sh') }}-Qt${{ matrix.qt_version }} + - name: Build Dependencies + shell: bash + if: steps.cache-deps.outputs.cache-hit != 'true' && matrix.platform != 'ubuntu-20.04' + run: ./libs/build_deps_all.sh + - name: Build Dependencies (Docker) + shell: bash + if: steps.cache-deps.outputs.cache-hit != 'true' && matrix.platform == 'ubuntu-20.04' + run: | + docker run --rm \ + -v $PWD:/nekoray \ + -w /nekoray \ + ghcr.io/matsuridayo/debian10-qt5:20230131 \ + bash -c "./libs/build_deps_all.sh" + # ========================================================================================================= Generate MakeFile and Build + - name: Windows - Generate MakeFile and Build + shell: bash + if: matrix.platform == 'windows-2022' + env: + DL_QT_VER: ${{ matrix.qt_version }} + CC: cl.exe + CXX: cl.exe + run: | + source libs/env_qtsdk.sh $PWD/qtsdk/Qt + mkdir build + cd build + cmake -GNinja -DQT_VERSION_MAJOR=6 -DCMAKE_BUILD_TYPE=Release .. + ninja -j2 + cd .. + ./libs/deploy_windows64.sh + - name: Linux - Generate MakeFile and Build + shell: bash + if: matrix.platform == 'ubuntu-20.04' + run: | + docker run --rm \ + -v $PWD:/nekoray \ + -w /nekoray \ + ghcr.io/matsuridayo/debian10-qt5:20230131 \ + bash -c "mkdir build && pushd build && cmake -GNinja -DCMAKE_BUILD_TYPE=Release .. && ninja && popd &&./libs/deploy_linux64.sh" + # ========================================================================================================= Deployments + - name: Tar files + shell: bash + run: tar czvf artifacts.tgz ./deployment + - name: Uploading Artifact + uses: actions/upload-artifact@v3 + with: + name: NekoRay-${{ github.sha }}-${{ matrix.platform }}-${{ matrix.arch }}-Qt${{ matrix.qt_version }} + path: artifacts.tgz + publish: + name: Pack & Publish Release + if: github.event.inputs.artifact-pack != 'y' + runs-on: ubuntu-latest + needs: + - build-cpp + - build-go + steps: + - name: Checking out sources + uses: actions/checkout@v3 + - name: Download Artifacts + uses: actions/download-artifact@v3 + with: + path: download-artifact + - name: Pack + run: | + curl -Lo - https://github.com/tcnksm/ghr/releases/download/v0.13.0/ghr_v0.13.0_linux_amd64.tar.gz | tar xzv + mv ghr*linux_amd64/ghr . + #### + source libs/env_deploy.sh + find . -name artifacts.tgz | xargs -n1 tar xvzf + cd deployment + cp -r public_res/* linux64 + cp -r public_res/* windows64 + rm -rf public_res *.pdb + #### + mv linux64 nekoray + zip -r $version_standalone-linux64.zip nekoray + rm -rf nekoray + #### + mv windows64 nekoray + zip -r $version_standalone-windows64.zip nekoray + rm -rf nekoray + - name: Pack Debian + run: | + source libs/env_deploy.sh + find . -name artifacts.tgz | xargs -n1 tar xvzf + cd deployment + cp -r public_res/* linux64 + #### + bash ../libs/package_debian.sh ${{ github.event.inputs.tag }} + mv nekoray.deb $version_standalone-debian-x64.deb + sudo rm -rf nekoray + - name: Pack AppImage + run: | + source libs/env_deploy.sh + find . -name artifacts.tgz | xargs -n1 tar xvzf + cd deployment + cp -r public_res/* linux64 + #### + bash ../libs/package_appimage.sh + mv nekobox-x86_64.AppImage $version_standalone-linux-x64.AppImage + - name: Clean Up + run: | + cd deployment + rm -rf linux64 + rm -rf windows64 + rm -rf public_res + rm -rf *.pdb + - name: Uploading Artifact + uses: actions/upload-artifact@v3 + with: + name: Deployment-${{ github.sha }} + path: deployment + - name: Release + if: github.event.inputs.publish != 'y' + run: | + ./ghr -delete -t "${{ github.token }}" -n "${{ github.event.inputs.tag }}" "${{ github.event.inputs.tag }}" deployment