name: Main on: push: branches: - "**" tags: - '[0-9]+.[0-9]+.[0-9]+' pull_request: branches: - "**" types: [opened, synchronize, reopened] concurrency: group: ${{ github.ref }} cancel-in-progress: true env: PREMAKE_VERSION: "5.0.0-beta2" jobs: build-windows: name: Build Windows runs-on: windows-2022 strategy: fail-fast: false matrix: config: - release arch: - x86 - x64 - arm64 include: - arch: x86 platform: Win32 - arch: x64 platform: x64 - arch: arm64 platform: arm64 steps: - name: Check out files uses: actions/checkout@v4 with: submodules: true fetch-depth: 0 lfs: false - name: Add msbuild to PATH uses: microsoft/setup-msbuild@v2 - name: Add premake5 to PATH uses: abel0b/setup-premake@v2.3 with: version: ${{ env.PREMAKE_VERSION }} - name: Generate project files run: premake5 vs2022 - name: Set up problem matching uses: ammaraskar/msvc-problem-matcher@master - name: Build ${{matrix.arch}} ${{matrix.config}} binaries run: msbuild /m /v:minimal /p:Configuration=${{matrix.config}} /p:Platform=${{matrix.platform}} build/gsc-tool.sln - name: Upload ${{matrix.arch}} ${{matrix.config}} binaries uses: actions/upload-artifact@v4.3.3 with: name: windows-${{matrix.arch}}-${{matrix.config}} path: | build/bin/${{matrix.arch}}/${{matrix.config}}/gsc-tool.exe build-macos: name: Build macOS runs-on: macos-13 strategy: fail-fast: false matrix: config: - release arch: - x64 - arm64 steps: - name: Check out files uses: actions/checkout@v4 with: submodules: true fetch-depth: 0 lfs: false - name: Set up Homebrew uses: Homebrew/actions/setup-homebrew@master - name: Install LLVM run: brew install llvm - name: Add LLVM to PATH run: | echo "/usr/local/opt/llvm/bin" >> $GITHUB_PATH - name: Add premake5 to PATH uses: abel0b/setup-premake@v2.3 with: version: ${{ env.PREMAKE_VERSION }} - name: Generate project files run: premake5 gmake2 - name: Set up problem matching uses: ammaraskar/gcc-problem-matcher@master - name: Build ${{matrix.arch}} ${{matrix.config}} binaries run: | pushd build make config=${{matrix.config}}_${{matrix.arch}} -j$(sysctl -n hw.logicalcpu) - name: Upload ${{matrix.arch}} ${{matrix.config}} binaries uses: actions/upload-artifact@v4.3.3 with: name: macos-${{matrix.arch}}-${{matrix.config}} path: | build/bin/${{matrix.arch}}/${{matrix.config}}/gsc-tool build-linux: name: Build Linux runs-on: ubuntu-24.04 strategy: fail-fast: false matrix: config: - release arch: - x64 # - arm64 steps: - name: Check out files uses: actions/checkout@v4 with: submodules: true fetch-depth: 0 lfs: false - name: Install LLVM run: | wget https://apt.llvm.org/llvm.sh chmod +x llvm.sh sudo ./llvm.sh 18 # - name: Install dependencies (arm64) # if: matrix.arch == 'arm64' # run: sudo apt-get install crossbuild-essential-arm64 -y - name: Add premake5 to PATH uses: abel0b/setup-premake@v2.3 with: version: ${{ env.PREMAKE_VERSION }} - name: Generate project files run: premake5 gmake2 - name: Set up problem matching uses: ammaraskar/gcc-problem-matcher@master - name: Build ${{matrix.arch}} ${{matrix.config}} binaries run: | pushd build make config=${{matrix.config}}_${{matrix.arch}} -j$(nproc) env: CC: clang-18 CXX: clang++-18 - name: Upload ${{matrix.arch}} ${{matrix.config}} binaries uses: actions/upload-artifact@v4.3.3 with: name: linux-${{matrix.arch}}-${{matrix.config}} path: | build/bin/${{matrix.arch}}/${{matrix.config}}/gsc-tool deploy: name: Deploy Release runs-on: ubuntu-latest needs: [ build-windows, build-macos, build-linux ] if: github.ref_type == 'tag' steps: - name: Checkout Source uses: actions/checkout@v4 with: sparse-checkout: | Dockerfile README.md sparse-checkout-cone-mode: false - name: Download Binaries uses: actions/download-artifact@v4.1.7 - name: Compress Binaries run: | for dir in */; do if [[ $dir == *"windows"* ]]; then cd "$dir" && zip -r "../${dir%/}.zip" . && cd .. else tar -czvf "${dir%/}.tar.gz" -C "$dir" . fi done shell: bash - name: Create Release uses: "marvinpinto/action-automatic-releases@latest" with: repo_token: "${{ secrets.GITHUB_TOKEN }}" prerelease: false draft: true files: | *.zip *.tar.gz # - name: Setup Cosign # if: github.event_name != 'pull_request' # uses: sigstore/cosign-installer@v3.1.1 # with: # cosign-release: 'v2.1.1' # - name: Setup QEMU # uses: docker/setup-qemu-action@v3.0.0 # with: # platforms: linux/amd64,linux/arm64 - name: Setup Docker Buildx uses: docker/setup-buildx-action@v3.0.0 - name: Login to DockerHub uses: docker/login-action@v3.0.0 with: username: ${{ secrets.DOCKERHUB_USER }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Login to GitHub Container Registry uses: docker/login-action@v3.0.0 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - id: meta uses: docker/metadata-action@v5.4.0 with: images: | xensik/gsc-tool ghcr.io/xensik/gsc-tool tags: | ${{ github.ref_name }} latest - name: Build and Push Docker Image id: build-and-push uses: docker/build-push-action@v5.1.0 with: context: . platforms: linux/amd64 push: true tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} cache-from: type=gha cache-to: type=gha,mode=max - name: Update DockerHub Information uses: peter-evans/dockerhub-description@v4 with: repository: xensik/gsc-tool username: ${{ secrets.DOCKERHUB_USER }} password: ${{ secrets.DOCKERHUB_TOKEN }} # - name: Sign the published Docker image # env: # TAGS: ${{ steps.meta.outputs.tags }} # DIGEST: ${{ steps.build-and-push.outputs.digest }} # run: echo "${TAGS}" | xargs -I {} cosign sign --yes {}@${DIGEST}