name: Build, test, upload on: push: branches: [ master ] pull_request: branches: [ master ] workflow_dispatch: # Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages permissions: contents: read pages: write id-token: write jobs: build-linux: strategy: matrix: sc: [no-self-contained, self-contained] runs-on: ubuntu-latest env: APP_NAME: coolgirl-multirom-builder OUTPUT_DIR: coolgirl-multirom-builder TOOLS_DIR: coolgirl-multirom-builder/tools OUTPUT_FILE_X64: coolgirl-multirom-builder-linux-x64${{ matrix.sc == 'self-contained' && '-self-contained' || '' }}.tar.gz OUTPUT_FILE_ARM32: coolgirl-multirom-builder-linux-arm32${{ matrix.sc == 'self-contained' && '-self-contained' || '' }}.tar.gz OUTPUT_FILE_ARM64: coolgirl-multirom-builder-linux-arm64${{ matrix.sc == 'self-contained' && '-self-contained' || '' }}.tar.gz steps: - name: Checkout uses: actions/checkout@v3 with: submodules: true - name: Setup .NET uses: actions/setup-dotnet@v2 with: dotnet-version: 6.0.x - name: apt-get update run: sudo apt-get update - name: Get ARM toolchain run: sudo apt-get install gcc-arm-linux-gnueabihf gcc-aarch64-linux-gnu - name: Copy main files run: >- mkdir -p ${{ env.OUTPUT_DIR }} && cp -fR *.asm Makefile LICENSE README.md configs spec demos games images footer.* ${{ env.OUTPUT_DIR }} - name: Build CoolgirlCombiner for Linux-x64 env: SC_OPS: ${{ matrix.sc == 'self-contained' && '--self-contained true -p:PublishTrimmed=False' || '--no-self-contained' }} run: dotnet publish tools_sources/CoolgirlCombiner -c Interim -r linux-x64 -o ${{ env.TOOLS_DIR }} ${{ env.SC_OPS }} - name: Build NesTiler for Linux-x64 env: SC_OPS: ${{ matrix.sc == 'self-contained' && '--self-contained true -p:PublishTrimmed=False' || '--no-self-contained' }} run: dotnet publish tools_sources/NesTiler/NesTiler -c Interim -r linux-x64 -o ${{ env.TOOLS_DIR }} ${{ env.SC_OPS }} - name: Build nesasm for Linux-x64 run: make -C tools_sources/nesasm/source EXEDIR=../../../${{ env.TOOLS_DIR }} - name: Remove unnecessary files run: rm -f ${{ env.TOOLS_DIR }}/*.md - name: Test build run: make -C ${{ env.OUTPUT_DIR }} all - name: Clean run: make -C ${{ env.OUTPUT_DIR }} clean - name: Archive env: CMD: tar -czvf run: | ${{ env.CMD }} ${{ env.OUTPUT_FILE_X64 }} ${{ env.OUTPUT_DIR }} - name: Upload artifact for Linux-x64 uses: actions/upload-artifact@v3 with: name: ${{ env.APP_NAME }}-linux-x64-${{ matrix.sc }} path: ${{ env.OUTPUT_FILE_X64 }} - name: Clean run: >- rm -f ${{ env.TOOLS_DIR }}/* && make -C tools_sources/nesasm/source clean - name: Build CoolgirlCombiner for Linux-ARM32 env: SC_OPS: ${{ matrix.sc == 'self-contained' && '--self-contained true -p:PublishTrimmed=False' || '--no-self-contained' }} run: dotnet publish tools_sources/CoolgirlCombiner -c Interim -r linux-arm -o ${{ env.TOOLS_DIR }} ${{ env.SC_OPS }} - name: Build NesTiler for Linux-ARM32 env: SC_OPS: ${{ matrix.sc == 'self-contained' && '--self-contained true -p:PublishTrimmed=False' || '--no-self-contained' }} run: dotnet publish tools_sources/NesTiler/NesTiler -c Interim -r linux-arm -o ${{ env.TOOLS_DIR }} ${{ env.SC_OPS }} - name: Build nesasm for Linux-ARM32 run: make -C tools_sources/nesasm/source EXEDIR=../../../${{ env.TOOLS_DIR }} CC=arm-linux-gnueabihf-gcc - name: Remove unnecessary files run: rm -f ${{ env.TOOLS_DIR }}/*.md - name: Archive env: CMD: tar -czvf run: | ${{ env.CMD }} ${{ env.OUTPUT_FILE_ARM32 }} ${{ env.OUTPUT_DIR }} - name: Upload artifact for Linux-ARM32 uses: actions/upload-artifact@v3 with: name: ${{ env.APP_NAME }}-linux-arm32-${{ matrix.sc }} path: ${{ env.OUTPUT_FILE_ARM32 }} - name: Clean run: >- rm -f ${{ env.TOOLS_DIR }}/* && make -C tools_sources/nesasm/source clean - name: Build CoolgirlCombiner for Linux-ARM64 env: SC_OPS: ${{ matrix.sc == 'self-contained' && '--self-contained true -p:PublishTrimmed=False' || '--no-self-contained' }} run: dotnet publish tools_sources/CoolgirlCombiner -c Interim -r linux-arm64 -o ${{ env.TOOLS_DIR }} ${{ env.SC_OPS }} - name: Build NesTiler for Linux-ARM64 env: SC_OPS: ${{ matrix.sc == 'self-contained' && '--self-contained true -p:PublishTrimmed=False' || '--no-self-contained' }} run: dotnet publish tools_sources/NesTiler/NesTiler -c Interim -r linux-arm64 -o ${{ env.TOOLS_DIR }} ${{ env.SC_OPS }} - name: Build nesasm for Linux-ARM64 run: make -C tools_sources/nesasm/source EXEDIR=../../../${{ env.TOOLS_DIR }} CC=aarch64-linux-gnu-gcc - name: Remove unnecessary files run: rm -f ${{ env.TOOLS_DIR }}/*.md - name: Archive env: CMD: tar -czvf run: | ${{ env.CMD }} ${{ env.OUTPUT_FILE_ARM64 }} ${{ env.OUTPUT_DIR }} - name: Upload artifact for Linux-ARM64 uses: actions/upload-artifact@v3 with: name: ${{ env.APP_NAME }}-linux-arm64-${{ matrix.sc }} path: ${{ env.OUTPUT_FILE_ARM64 }} build-macos: strategy: matrix: sc: [no-self-contained, self-contained] runs-on: macos-latest env: APP_NAME: coolgirl-multirom-builder OUTPUT_DIR: coolgirl-multirom-builder TOOLS_DIR: coolgirl-multirom-builder/tools OUTPUT_FILE: coolgirl-multirom-builder-osx-x64${{ matrix.sc == 'self-contained' && '-self-contained' || '' }}.tar.gz steps: - name: Checkout uses: actions/checkout@v3 with: submodules: true - name: Setup .NET uses: actions/setup-dotnet@v2 with: dotnet-version: 6.0.x - name: Setup argp run: brew install argp-standalone - name: Copy main files run: >- mkdir -p ${{ env.OUTPUT_DIR }} && cp -fR *.asm Makefile LICENSE README.md configs spec demos games images footer.* ${{ env.OUTPUT_DIR }} - name: Build CoolgirlCombiner for MacOS-x64 env: SC_OPS: ${{ matrix.sc == 'self-contained' && '--self-contained true -p:PublishTrimmed=False' || '--no-self-contained' }} run: dotnet publish tools_sources/CoolgirlCombiner -c Interim -r osx-x64 -o ${{ env.TOOLS_DIR }} ${{ env.SC_OPS }} - name: Build NesTiler for MacOS-x64 env: SC_OPS: ${{ matrix.sc == 'self-contained' && '--self-contained true -p:PublishTrimmed=False' || '--no-self-contained' }} run: dotnet publish tools_sources/NesTiler/NesTiler -c Interim -r osx-x64 -o ${{ env.TOOLS_DIR }} ${{ env.SC_OPS }} - name: Build nesasm for MacOS-x64 run: make -C tools_sources/nesasm/source EXEDIR=../../../${{ env.TOOLS_DIR }} - name: Remove unnecessary files run: rm -f ${{ env.TOOLS_DIR }}/*.md - name: Test build run: make -C ${{ env.OUTPUT_DIR }} all - name: Clean run: make -C ${{ env.OUTPUT_DIR }} clean - name: Archive env: CMD: tar -czvf run: | ${{ env.CMD }} ${{ env.OUTPUT_FILE }} ${{ env.OUTPUT_DIR }} - name: Upload artifact for MacOS-x64 uses: actions/upload-artifact@v3 with: name: ${{ env.APP_NAME }}-osx-x64-${{ matrix.sc }} path: ${{ env.OUTPUT_FILE }} build-windows: strategy: matrix: sc: [no-self-contained, self-contained] runs-on: windows-latest env: APP_NAME: coolgirl-multirom-builder OUTPUT_DIR: coolgirl-multirom-builder TOOLS_DIR: coolgirl-multirom-builder/tools OUTPUT_FILE: coolgirl-multirom-builder-win-x64${{ matrix.sc == 'self-contained' && '-self-contained' || '' }}.zip steps: - name: Checkout uses: actions/checkout@v3 with: submodules: true - name: Setup .NET uses: actions/setup-dotnet@v2 with: dotnet-version: 6.0.x - name: Setup msys uses: msys2/setup-msys2@v2 with: update: true install: >- base-devel gcc git libargp-devel zip - name: Copy main files shell: msys2 {0} run: >- mkdir -p ${{ env.OUTPUT_DIR }} && cp -fR *.asm Makefile LICENSE README.md configs spec demos games images footer.* *.bat ${{ env.OUTPUT_DIR }} - name: Build CoolgirlCombiner for Win-x64 env: SC_OPS: ${{ matrix.sc == 'self-contained' && '--self-contained true -p:PublishTrimmed=False' || '--no-self-contained' }} run: dotnet publish tools_sources/CoolgirlCombiner -c Interim -r win-x64 -o ${{ env.TOOLS_DIR }} ${{ env.SC_OPS }} - name: Build NesTiler for Win-x64 env: SC_OPS: ${{ matrix.sc == 'self-contained' && '--self-contained true -p:PublishTrimmed=False' || '--no-self-contained' }} run: dotnet publish tools_sources/NesTiler/NesTiler -c Interim -r win-x64 -o ${{ env.TOOLS_DIR }} ${{ env.SC_OPS }} - name: Remove unnecessary files shell: msys2 {0} run: rm -f ${{ env.TOOLS_DIR }}/*.md - name: Build nesasm for Win-x64 shell: msys2 {0} run: make -C tools_sources/nesasm/source EXEDIR=../../../${{ env.TOOLS_DIR }} - name: Test build shell: msys2 {0} run: make -C ${{ env.OUTPUT_DIR }} all - name: Clean shell: msys2 {0} run: make -C ${{ env.OUTPUT_DIR }} clean - name: Archive env: CMD: zip -r9 shell: msys2 {0} run: | ${{ env.CMD }} ${{ env.OUTPUT_FILE }} ${{ env.OUTPUT_DIR }} - name: Upload artifact for Win-x64 uses: actions/upload-artifact@v3 with: name: ${{ env.APP_NAME }}-win-x64-${{ matrix.sc }} path: ${{ env.OUTPUT_FILE }} upload-to-pages: needs: [build-linux, build-macos, build-windows] runs-on: ubuntu-latest steps: - name: Download artifacts uses: actions/download-artifact@v3 - name: Move files to the root run: find -mindepth 2 -exec mv {} . \; - name: Remove empty directories run: find -mindepth 1 -type d -delete - name: Generate index.html run: "(echo \"COOLGIRL Multirom BuilderUpdated: `date`

\" ; for file in coolgirl-* ; do echo \"$file
\" ; done ; echo \"\") > index.html" - name: Upload artifact uses: actions/upload-pages-artifact@v1 with: path: '.' - name: Deploy to GitHub Pages id: deployment uses: actions/deploy-pages@v1 if: github.event_name != 'pull_request'