diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..1baad38 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,222 @@ +name: BYTEPATH CI + +on: + push: + branches: [main] + tags: [pre*, v*] + pull_request: + +env: + BUILD_TYPE: ${{ fromJSON('["dev", "release"]')[startsWith(github.ref, 'refs/tags/v')] }} + CORE_LOVE_PACKAGE_PATH: ./core.love + CORE_LOVE_ARTIFACT_NAME: core_love_package + +jobs: + get-info: + runs-on: ubuntu-latest + outputs: + app-name: ${{ steps.app-info.outputs.app-name }} + version: ${{ steps.app-info.outputs.version }} + commit-hash: ${{ steps.git-info.outputs.commit-hash }} + base-name: ${{ steps.assemble-base-name.outputs.base-name }} + steps: + - uses: actions/checkout@v3 + - name: Install lua + run: | + sudo apt-get install lua5.1 -y + - name: Get app info + id: app-info + shell: lua {0} + run: | + local version = require "version" + os.execute('echo "app-name=BYTEPATH" >> $GITHUB_OUTPUT') + os.execute('echo "version=' .. version .. '" >> $GITHUB_OUTPUT') + - name: Get git info + id: git-info + shell: bash + run: | + COMMIT_HASH=$(git rev-parse --short ${{ GITHUB.SHA }}) + echo "commit-hash=$COMMIT_HASH" >> $GITHUB_OUTPUT + - name: Assemble package base name + id: assemble-base-name + shell: bash + run: | + BASE_NAME=BYTEPATH_${{ steps.app-info.outputs.version }}_${{ steps.git-info.outputs.commit-hash }}_#${{ GITHUB.RUN_NUMBER }} + echo "base-name=$BASE_NAME" >> $GITHUB_OUTPUT + + build-core: + runs-on: ubuntu-latest + needs: get-info + env: + OUTPUT_FOLDER: ./build + RELEASE_FOLDER: ./release + steps: + - uses: actions/checkout@v3 + with: + submodules: recursive + - name: Process app name + id: process-app-name + shell: python3 {0} + run: | + import os + import re + with open(os.getenv('GITHUB_OUTPUT'), 'a') as f: + f.write('product-name=' + re.sub(r'[^A-Za-z0-9]+', '_', '${{ needs.get-info.outputs.app-name }}') + '\n') + - name: Build core love package + uses: love-actions/love-actions-core@v1 + with: + package-path: ${{ env.CORE_LOVE_PACKAGE_PATH }} + - name: Upload core love package + uses: actions/upload-artifact@v3 + with: + name: ${{ env.CORE_LOVE_ARTIFACT_NAME }} + path: ${{ env.CORE_LOVE_PACKAGE_PATH }} + - name: Rename love package + run: | + mkdir -p ${{ env.OUTPUT_FOLDER }} + mv ${{ env.CORE_LOVE_PACKAGE_PATH }} ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.love + - name: Upload artifact + uses: actions/upload-artifact@v3 + with: + name: ${{ needs.get-info.outputs.base-name }}_Core_love + path: ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.love + - name: Prepare for release + if: ${{ startsWith(github.ref, 'refs/tags/pre') || startsWith(github.ref, 'refs/tags/v') }} + shell: bash + run: | + mkdir -p ${{ env.RELEASE_FOLDER }} + cp ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.love ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Bare.love + - name: Upload release + if: ${{ startsWith(github.ref, 'refs/tags/pre') || startsWith(github.ref, 'refs/tags/v') }} + uses: ncipollo/release-action@v1 + with: + allowUpdates: true + artifacts: ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Bare.love + body: ${{ needs.get-info.outputs.update-note }} + name: ${{ needs.get-info.outputs.update-title }} + prerelease: ${{ startsWith(github.ref, 'refs/tags/pre') }} + + build-linux: + runs-on: ubuntu-latest + needs: [get-info, build-core] + env: + OUTPUT_FOLDER: ./build + RELEASE_FOLDER: ./release + steps: + - uses: actions/checkout@v3 + with: + submodules: recursive + - name: Process app name + id: process-app-name + shell: python3 {0} + run: | + import os + import re + + product_name = re.sub(r'[^A-Za-z0-9]+', '-', '${{ needs.get-info.outputs.app-name }}').strip('-').lower() + with open(os.getenv('GITHUB_OUTPUT'), 'a') as f: + f.write('bundle-id=org.26f-studio.' + product_name + '\n') + f.write('product-name=' + product_name + '\n') + - name: Download core love package + uses: actions/download-artifact@v3 + with: + name: ${{ env.CORE_LOVE_ARTIFACT_NAME }} + - name: Build Linux packages + id: build-packages + uses: love-actions/love-actions-linux@v1 + with: + app-name: ${{ needs.get-info.outputs.app-name }} + version-string: ${{ needs.get-info.outputs.version }} + icon-path: ./resources/graphics/icon.png + love-package: ${{ env.CORE_LOVE_PACKAGE_PATH }} + product-name: ${{ steps.process-app-name.outputs.product-name }} + output-folder: ${{ env.OUTPUT_FOLDER }} + - name: Upload AppImage artifact + uses: actions/upload-artifact@v3 + with: + name: ${{ needs.get-info.outputs.base-name }}_Linux_AppImage + path: ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.AppImage + - name: Prepare for release + if: ${{ startsWith(github.ref, 'refs/tags/pre') || startsWith(github.ref, 'refs/tags/v') }} + shell: bash + run: | + mkdir -p ${{ env.RELEASE_FOLDER }} + cp ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.AppImage ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Linux.AppImage + cp ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.deb ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Linux.deb + - name: Upload release + if: ${{ startsWith(github.ref, 'refs/tags/pre') || startsWith(github.ref, 'refs/tags/v') }} + uses: ncipollo/release-action@v1 + with: + allowUpdates: true + artifacts: | + ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Linux.AppImage + ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Linux.deb + body: ${{ needs.get-info.outputs.update-note }} + name: ${{ needs.get-info.outputs.update-title }} + prerelease: ${{ startsWith(github.ref, 'refs/tags/pre') }} + + build-windows: + runs-on: windows-latest + needs: [get-info, build-core] + env: + OUTPUT_FOLDER: ./build + RELEASE_FOLDER: ./release + steps: + - uses: actions/checkout@v3 + with: + submodules: recursive + - name: Process app name + id: process-app-name + shell: python3 {0} + run: | + import os + import re + with open(os.getenv('GITHUB_OUTPUT'), 'a') as f: + f.write('product-name=' + re.sub(r'[^A-Za-z0-9]+', '_', '${{ needs.get-info.outputs.app-name }}') + '\n') + - name: Download core love package + uses: actions/download-artifact@v3 + with: + name: ${{ env.CORE_LOVE_ARTIFACT_NAME }} + - name: Build Windows packages + id: build-packages + uses: love-actions/love-actions-windows@v1 + with: + icon-path: ./.github/build/icon.ico + love-package: ${{ env.CORE_LOVE_PACKAGE_PATH }} + product-name: ${{ steps.process-app-name.outputs.product-name }} + output-folder: ${{ env.OUTPUT_FOLDER }} + - name: Upload 32-bit artifact + uses: actions/upload-artifact@v3 + with: + name: ${{ needs.get-info.outputs.base-name }}_Windows_x86 + path: ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_x86.zip + - name: Upload 64-bit artifact + uses: actions/upload-artifact@v3 + with: + name: ${{ needs.get-info.outputs.base-name }}_Windows_x64 + path: ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_x64.zip + - name: Upload installer artifact + uses: actions/upload-artifact@v3 + with: + name: ${{ needs.get-info.outputs.base-name }}_Windows_installer + path: ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_installer.exe + - name: Prepare for release + if: ${{ startsWith(github.ref, 'refs/tags/pre') || startsWith(github.ref, 'refs/tags/v') }} + shell: bash + run: | + mkdir -p ${{ env.RELEASE_FOLDER }} + cp ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_x86.zip ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Windows_x86.zip + cp ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_x64.zip ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Windows_x64.zip + cp ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_installer.exe ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Windows_installer.exe + - name: Upload release + if: ${{ startsWith(github.ref, 'refs/tags/pre') || startsWith(github.ref, 'refs/tags/v') }} + uses: ncipollo/release-action@v1 + with: + allowUpdates: true + artifacts: | + ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Windows_x86.zip + ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Windows_x64.zip + ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Windows_installer.exe + body: ${{ needs.get-info.outputs.update-note }} + name: ${{ needs.get-info.outputs.update-title }} + prerelease: ${{ startsWith(github.ref, 'refs/tags/pre') }} diff --git a/main.lua b/main.lua index 82ecd86..4e5753e 100644 --- a/main.lua +++ b/main.lua @@ -27,7 +27,7 @@ require 'tree' -- https://hc.readthedocs.io/en/latest/SpatialHash.html#Spatialhash HC.hash().cell_size = 25 -if not love.window.setIcon(love.image.newImageData("resources/graphics/icon.jpg")) then +if not love.window.setIcon(love.image.newImageData("resources/graphics/icon.png")) then print(string.format('icon failed to load\n')) end diff --git a/resources/graphics/icon.ico b/resources/graphics/icon.ico new file mode 100644 index 0000000..04cdf4d Binary files /dev/null and b/resources/graphics/icon.ico differ diff --git a/resources/graphics/icon.jpg b/resources/graphics/icon.jpg deleted file mode 100644 index d89c8ae..0000000 Binary files a/resources/graphics/icon.jpg and /dev/null differ diff --git a/resources/graphics/icon.png b/resources/graphics/icon.png new file mode 100644 index 0000000..e81c99e Binary files /dev/null and b/resources/graphics/icon.png differ