Skip to content

Build and deploy Aseprite #261

Build and deploy Aseprite

Build and deploy Aseprite #261

name: Build and deploy Aseprite
on:
schedule:
- cron: '0 0 * * *'
push:
branches:
- master
env:
BUILD_TYPE: Release
jobs:
check-version:
name: Check latest Aseprite release
runs-on: ubuntu-latest
outputs:
download_url: ${{ steps.version_info.outputs.download_url }}
latest_tag: ${{ steps.version_info.outputs.latest_tag }}
should_build: ${{ steps.should_build.outputs.should_build }}
upload_url: ${{ steps.create_release.outputs.upload_url }}
steps:
- name: Get latest version info
id: version_info
run: |
data=$(curl -sL https://api.github.com/repos/aseprite/aseprite/releases)
LATEST_TAG=$(echo "${data}" | jq -r '[.[].tag_name|select(startswith("v1.3"))][0]')
data=$(curl -sL https://api.github.com/repos/aseprite/aseprite/releases/tags/$LATEST_TAG)
DOWNLOAD_URL=$(echo "${data}" | jq -r '.assets[].browser_download_url')
VERSION_INFO=$(echo "${data}" | jq -r '.body')
echo "${LATEST_TAG}" > ${LATEST_TAG}.txt
echo "latest_tag=${LATEST_TAG}" >> $GITHUB_OUTPUT
echo "download_url=${DOWNLOAD_URL}" >> $GITHUB_OUTPUT
echo "version_info<<EOF" >> $GITHUB_OUTPUT
echo "$VERSION_INFO" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
- name: Load version from cache
id: version_check
uses: actions/cache@v4
with:
path: ${{ steps.version_info.outputs.latest_tag }}.txt
key: cached_version
- name: Should we start new build?
id: should_build
if: steps.version_check.outputs.cache-hit != 'true'
run: echo "should_build=true" >> $GITHUB_OUTPUT
build-aseprite:
name: Build Aseprite
needs: check-version
if: ${{ needs.check-version.outputs.should_build }}
runs-on: ${{ matrix.os }}
strategy:
matrix:
# os: [windows-latest, ubuntu-latest, macOS-latest]
os: [windows-latest]
fail-fast: false
steps:
- name: (Windows) Install dependencies
if: matrix.os == 'windows-latest'
uses: seanmiddleditch/gha-setup-ninja@v4
- name: (Ubuntu) Install dependencies
if: matrix.os == 'ubuntu-latest'
run: sudo apt install -y cmake ninja-build libxcursor-dev libxi-dev libgl1-mesa-dev
- name: (macOS) Install dependencies
if: matrix.os == 'macOS-latest'
run: brew install ninja p7zip
- name: Download Skia
if: contains(needs.check-version.outputs.latest_tag, 'beta') == false
run: |
curl -o Skia-${{ runner.os }}-Release-X64.zip -L https://github.com/aseprite/skia/releases/download/m102-861e4743af/Skia-${{ runner.os }}-Release-X64.zip
unzip Skia-${{ runner.os }}-Release-X64.zip -d skia
- name: Download Skia for beta
if: contains(needs.check-version.outputs.latest_tag, 'beta')
run: |
curl -o Skia-${{ runner.os }}-Release-X64.zip -L https://github.com/aseprite/skia/releases/download/m124-08a5439a6b/Skia-${{ runner.os }}-Release-X64.zip
unzip Skia-${{ runner.os }}-Release-X64.zip -d skia
- name: Download Aseprite release
# uses: actions/checkout@v4
# with:
# repository: aseprite/aseprite
# ref: ${{ needs.check-version.outputs.latest_tag }}
# path: 'aseprite'
# submodules: 'recursive'
run: |
curl -o Aseprite-source.zip -L ${{ needs.check-version.outputs.download_url }}
unzip Aseprite-source.zip -d aseprite
- name: Create build folder
run: mkdir -p aseprite/build
- name: Use ccache
if: matrix.os == 'ubuntu-latest'
uses: hendrikmuhs/ccache-action@v1
- name: (Windows) Set architecture for the produced binary
if: matrix.os == 'windows-latest'
shell: cmd
run: call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\Tools\VsDevCmd.bat" -arch=x64
- name: (Windows) Setting Visual Studio build environment variables and paths
if: matrix.os == 'windows-latest'
uses: ilammy/msvc-dev-cmd@v1
- name: (Windows) Run CMake
if: matrix.os == 'windows-latest'
working-directory: aseprite/build
shell: bash
run: cmake -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} -DCMAKE_IGNORE_PATH='C:/ProgramData/chocolatey/bin/;C:/Strawberry/c/bin/' -DLAF_BACKEND=skia -DSKIA_DIR=$(realpath ../../skia) -DSKIA_LIBRARY_DIR=$(realpath ../../skia/out/Release-x64) -G Ninja ..
- name: (Ubuntu) Run CMake
if: matrix.os == 'ubuntu-latest'
working-directory: aseprite/build
shell: bash
run: cmake -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} -DLAF_BACKEND=skia -DSKIA_DIR=$(realpath ../../skia) -DSKIA_LIBRARY_DIR=$(realpath ../../skia/out/Release-x64) -G Ninja ..
- name: (macOS) Run CMake
if: matrix.os == 'macOS-latest'
working-directory: aseprite/build
shell: bash
run: cmake -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} -DCMAKE_OSX_ARCHITECTURES=x86_64 -DCMAKE_OSX_DEPLOYMENT_TARGET=10.9 -DCMAKE_OSX_SYSROOT=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk -DLAF_BACKEND=skia -DSKIA_DIR=$(realpath ../../skia) -DSKIA_LIBRARY_DIR=$(realpath ../../skia/out/Release-x64) -G Ninja ..
- name: Run Ninja
working-directory: aseprite/build
run: ninja aseprite
- name: Clean up build
working-directory: aseprite/build/bin
shell: bash
run: rm -f gen modp_b64_gen gen.exe gen.exe.manifest modp_b64_gen.exe modp_b64_gen.exe.manifest
- name: (Windows) Make portable zip
working-directory: aseprite/build/bin
run: echo '# This file is here so Aseprite behaves as a portable program' > aseprite.ini
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: Aseprite-${{ needs.check-version.outputs.latest_tag }}
path: aseprite/build/bin/