diff --git a/.github/workflows/gearsystem.yml b/.github/workflows/gearsystem.yml index 0f6b7249..9812bc42 100644 --- a/.github/workflows/gearsystem.yml +++ b/.github/workflows/gearsystem.yml @@ -1,11 +1,18 @@ -name: Gearsystem CI +name: Main Workflow on: + workflow_dispatch: push: + paths-ignore: + - '**.md' pull_request: schedule: - cron: '0 0 * * 0' +env: + NAME_LOWER: gearsystem + NAME_UPPER: Gearsystem + jobs: linux: name: Linux @@ -13,6 +20,9 @@ jobs: matrix: os: [ubuntu-22.04, ubuntu-20.04] runs-on: ${{ matrix.os }} + permissions: + contents: read + packages: write steps: - name: Checkout uses: actions/checkout@v4 @@ -22,36 +32,59 @@ jobs: run: sudo apt-get update -qq - name: Install dependencies run: sudo apt-get install -y libsdl2-dev libglew-dev libgtk-3-dev + - name: Get build number + run: | + echo "BUILD_NUMBER=$(git describe --abbrev=7 --dirty --always --tags)" >> $GITHUB_ENV - name: make run: make working-directory: platforms/linux + - name: Prepare artifact directory + run: | + mkdir -p artifact + cp platforms/README.txt artifact + cp platforms/gamecontrollerdb.txt artifact + cp platforms/linux/${{ env.NAME_LOWER }} artifact - name: Archive binary uses: actions/upload-artifact@v4 with: - name: Linux (${{ matrix.os }}) binary - path: platforms/linux/gearsystem + name: ${{ env.NAME_UPPER }}-${{ env.BUILD_NUMBER }}-${{ matrix.os }} + path: artifact/* libretro: - name: Libretro (Ubuntu) + name: Libretro (ubuntu) runs-on: ubuntu-latest + permissions: + contents: read + packages: write steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 + - name: Get build number + run: | + echo "BUILD_NUMBER=$(git describe --abbrev=7 --dirty --always --tags)" >> $GITHUB_ENV - name: make run: make working-directory: platforms/libretro - name: Archive binary uses: actions/upload-artifact@v4 with: - name: Libretro (Linux) core - path: platforms/libretro/gearsystem_libretro.so + name: ${{ env.NAME_UPPER }}-${{ env.BUILD_NUMBER }}-libretro-linux + path: platforms/libretro/${{ env.NAME_LOWER }}_libretro.so macos: name: macOS strategy: matrix: os: [macos-13, macos-14] + include: + - os: macos-13 + architecture: intel + - os: macos-14 + architecture: arm runs-on: ${{ matrix.os }} + permissions: + contents: read + packages: write steps: - name: Checkout uses: actions/checkout@v4 @@ -59,45 +92,71 @@ jobs: fetch-depth: 0 - name: Install dependencies run: brew install sdl2 + - name: Get build number + run: | + echo "BUILD_NUMBER=$(git describe --abbrev=7 --dirty --always --tags)" >> $GITHUB_ENV - name: make run: make dist working-directory: platforms/macos + - name: Prepare artifact directory + run: | + mkdir -p artifact + cp platforms/README.txt artifact + cp platforms/gamecontrollerdb.txt artifact + cp -R platforms/macos/${{ env.NAME_UPPER }}.app artifact - name: Archive binary uses: actions/upload-artifact@v4 with: - name: ${{ matrix.os }} App bundle - path: platforms/macos/Gearsystem.app + name: ${{ env.NAME_UPPER }}-${{ env.BUILD_NUMBER }}-macos-${{ matrix.architecture }} + path: artifact/* windows: name: Windows runs-on: windows-latest + permissions: + contents: read + packages: write steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 - - name: Add msbuild to PATH + - name: Setup msbuild uses: microsoft/setup-msbuild@v2 - - name: Get git version - id: gitversion + - name: Get build number shell: bash - run: echo "gitversion=$(git describe --abbrev=7 --dirty --always --tags)" >> $GITHUB_OUTPUT + run: | + echo "BUILD_NUMBER=$(git describe --abbrev=7 --dirty --always --tags)" >> $GITHUB_ENV - name: msbuild - run: msbuild Gearsystem.sln /t:Clean,Build /p:EmulatorBuild="${{ steps.gitversion.outputs.gitversion }}" /p:Configuration=Release + run: msbuild ${{ env.NAME_UPPER }}.sln /t:Clean,Build /p:EmulatorBuild="${{ env.BUILD_NUMBER }}" /p:Configuration=Release working-directory: platforms/windows + - name: Prepare artifact directory + run: | + mkdir -p artifact + cp platforms/README.txt artifact + cp platforms/gamecontrollerdb.txt artifact + cp platforms/windows/dependencies/glew-2.1.0/bin/Release/x64/glew32.dll artifact + cp platforms/windows/dependencies/SDL2-2.28.5/lib/x64/SDL2.dll artifact + cp platforms/windows/release/${{ env.NAME_UPPER }}.exe artifact - name: Archive binary uses: actions/upload-artifact@v4 with: - name: Windows binary - path: platforms/windows/release/Gearsystem.exe + name: ${{ env.NAME_UPPER }}-${{ env.BUILD_NUMBER }}-windows + path: artifact/* bsd: - name: FreeBSD + name: BSD runs-on: ubuntu-latest + permissions: + contents: read + packages: write steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 - - name: make + - name: Get build number + run: | + echo "BUILD_NUMBER=$(git describe --abbrev=7 --dirty --always --tags)" >> $GITHUB_ENV + - name: Run FreeBSD and gmake id: test uses: vmactions/freebsd-vm@v1 with: @@ -106,8 +165,57 @@ jobs: run: | cd platforms/bsd gmake + - name: Prepare artifact directory + run: | + mkdir -p artifact + cp platforms/README.txt artifact + cp platforms/gamecontrollerdb.txt artifact + cp platforms/bsd/${{ env.NAME_LOWER }} artifact - name: Archive binary uses: actions/upload-artifact@v4 with: - name: BSD (FreeBSD) binary - path: platforms/bsd/gearsystem + name: ${{ env.NAME_UPPER }}-${{ env.BUILD_NUMBER }}-bsd + path: artifact/* + release: + name: Release + needs: [linux, macos, windows, bsd] + if: github.event_name != 'pull_request' && startswith(github.ref, 'refs/tags/') + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Get build number + run: | + echo "BUILD_NUMBER=$(git describe --abbrev=7 --dirty --always --tags)" >> $GITHUB_ENV + - name: Prepare release directory + run: | + mkdir -p release + - name: Download artifacts + uses: actions/download-artifact@v4 + with: + pattern: ${{ env.NAME_UPPER }}-${{ env.BUILD_NUMBER }}-* + path: release + - name: Zip directories + run: | + cd release + for f in *; do + if [ -d "$f" ]; then + cd $f + echo "Compressing $f" + zip -r $f.zip * + mv $f.zip ../ + cd .. + fi + done + - name: Create release + run: | + gh release create ${{ github.ref_name }} ./release/*.zip \ + --title "${{ env.NAME_UPPER }} ${{ github.ref_name }}" \ + --draft \ + --generate-notes + env: + GITHUB_TOKEN: ${{ github.TOKEN }}