使用自动化构建 Aseprite(Github Actions)

49 阅读5分钟

众所周知!在网上有很多的教你如何构建 Aseprite 的教程!但是,我们可以发现,构建 Aseprite 的步骤极其繁琐,并且需要安装 Visual Studio 这款开发工具!而我们众所周知的!这款工具占用电脑存储几十个 G,又大又笨重!我们只是想要一个可以直接使用的 Aseprite,而又不想直接上 steam 买。。

我们发现,Aseprite 这款软件是开源的!官方提供了一个 INSTALL.md 来专门指导我们如何手动安装我们的 Aseprite!这种方式的优点在于它无需付费!但是缺点就是极为繁琐。。

随后,我们可以发现,Github 提供一个很神奇的功能,叫做(CI/CD),这个功能非常强大,它可以自动化的构建任何我们想要的东西!是的,纯纯利用 Github Actions 的虚拟机来构建,无需动用本地机器!

首先,如何使用 Github Actions 呢?很简单,我们首先还得是先注册一个 Github 账号!如何注册的话这个网上有很多教程了!这里不再赘述!

随后新建一个仓库(点击右上角的+键,随后点击 Create New Repository)!仓库名称随意,仓库可以 Public 也可以 Private,但是必须新建一个 README.md!因为我们的所有操作都是要在网页端进行的!我们暂时无需动用到本地功能。。

随后,我们进入我们新建的仓库里面!网址大概是:https://github.com/<你的用户名>/<你的仓库名>

里面大概率会有一个空的 README.md 文件!

随后,我们点击右上角绿色按钮旁边的+号按钮!因为我们要往里面添加一个自动化流的文件!点击 Create New File,随后文件名这么写:【/.github/workflows/build.yml

之后内容嘛,各位可以先复制粘贴我以下的内容,随后我会慢慢的跟各位解释分别代表什么意思。

# 该自动化工作流仅限 Windows,如果你有更好的建议,欢迎在评论区留言~
name: Aseprite Build

on:
  # 手动运行一次工作流
  workflow_dispatch:
  # 当 main 分支被推送时运行一次工作流
  push:
    branches: [main]
  
# 工作流内容
jobs:
  # 仅一个工作流,就是构建 Windows x64,如果各位要是有别的系统构建的工作流,当然可以在评论区留言~
  build:
    # 工作流平台
    # 发生错误时不那么快速的抛出错误!等待步骤进行完毕后再退出
    strategy:
      fail-fast: false
    # 运行在 Windows 上的工作流
    runs-on: windows-latest
    steps:
      # 第一步,检查代码,这一步一般是下载 git、下载一些常用软件时才用!
      - name: Checkout code
        uses: actions/checkout@v2
      # 查找 Skia 的网址并将正确的下载链接放到 ENV 里,步骤不详解
      - name: Get Skia URL
        shell: pwsh
        run: |
          Write-Host "Start Request Skia URL"
          $response = Invoke-RestMethod -Uri "https://api.github.com/repos/aseprite/skia/releases/latest" -Method Get
          $url = 'https://github.com/aseprite/skia/releases/download/' + $response.tag_name + '/Skia-Windows-Release-x64.zip'
          Write-Host "Skia URL: $url"
          echo ('SKIA_URL=' + $url) >> $env:GITHUB_ENV
      # 下载并解压 Skia 到 C 盘!
      - name: Download And Unzip Skia
        shell: pwsh
        run: |
          mkdir C:\deps
          Invoke-WebRequest -Uri $env:SKIA_URL -OutFile "C:\deps\skia.zip"
          Expand-Archive -Path "C:\deps\skia.zip" -DestinationPath "C:\deps\skia"
          echo "SKIA_PATH=C:\deps\skia" >> $env:GITHUB_ENV
      # 获取 CMAKE 的版本!因为下面有地方需要用到!
      - name: Get Cmake Version
        shell: pwsh
        run: |
          Write-Host "Start Request Cmake URL"
          $response = Invoke-RestMethod -Uri "https://api.github.com/repos/Kitware/CMake/releases/latest" -Method Get
          $version = $response.tag_name -replace 'v', ''
          Write-Host "CMAKE Version: $version"
          echo ('CMAKE_VERSION=' + $version) >> $env:GITHUB_ENV
      # 下载并解压 CMAKE 到 C 盘,并且导出真实路径到 PATH!
      - name: Download And Unzip Cmake
        shell: pwsh
        run: |
          Invoke-WebRequest -Uri ('https://github.com/Kitware/CMake/releases/download/v' + $env:CMAKE_VERSION + '/cmake-' + $env:CMAKE_VERSION + '-windows-x86_64.zip') -OutFile "C:\deps\cmake.zip"
          Expand-Archive -Path "C:\deps\cmake.zip" -DestinationPath "C:\deps\cmake"
          echo ('CMAKE_PATH=C:\deps\cmake\cmake-' + $env:CMAKE_VERSION + '-windows-x86_64') >> $env:GITHUB_ENV
          echo ('C:\deps\cmake\cmake-' + $env:CMAKE_VERSION + '-windows-x86_64\bin') >> $env:GITHUB_PATH
      # 获取 Ninja 的网址
      - name: Get Ninja URL
        shell: pwsh
        run: |
          Write-Host "Start Request Ninja URL"
          $response = Invoke-RestMethod -Uri "https://api.github.com/repos/ninja-build/ninja/releases/latest" -Method Get
          $url = ($response.assets | Where-Object {$_.name -eq "ninja-win.zip"} ).browser_download_url
          Write-Host "NINJA URL: $url"
          echo "NINJA_URL=$url" >> $env:GITHUB_ENV
      # 下载 Ninja 并解压到与 cmake 同一目录下方便运行
      - name: Download And Unzip Ninja
        shell: pwsh
        run: |
          Invoke-WebRequest -Uri $env:NINJA_URL -OutFile "C:\deps\ninja.zip"
          Expand-Archive -Path "C:\deps\ninja.zip" -DestinationPath "$CMAKE_PATH\bin"
      # 终于开始获取 Aseprite 网址啦!
      - name: Get Aseprite URL
        shell: pwsh
        run: |
          $response = Invoke-RestMethod -Uri "https://api.github.com/repos/aseprite/aseprite/releases/latest" -Method Get
          $url = $response.assets[0].browser_download_url
          Write-Host "Aseprite URL: $url"
          echo ('ASEPRITE_URL=' + $url) >> $env:GITHUB_ENV
      # 下载并解压 Aseprite
      - name: Download And Unzip Aseprite
        shell: pwsh
        run: |
          Invoke-WebRequest -Uri $env:ASEPRITE_URL -OutFile "C:\deps\aseprite.zip"
          Expand-Archive -Path "C:\deps\aseprite.zip" -DestinationPath "C:\deps\aseprite"
      # 添加 Microsoft MSVC++ Build,因为 Aseprite 构建不支持 Mingw。。
      - name: Add MSBuild
        uses: microsoft/setup-msbuild@v2
        with:
          msbuild-architecture: x64
      # 开始打包 Aseprite 啦!以下均在官方 INSTALL.md 中运行通过!
      - name: Build Aseprite
        shell: cmd
        run: |
          call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\Tools\VsDevCmd.bat" -arch=x64
          C:
          cd C:\deps\aseprite
          mkdir build
          cd build
          cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_IGNORE_PATH=C:\Strawberry\c\bin -DCMAKE_IGNORE_PATH=C:\mingw64\bin -DLAF_BACKEND=skia -DSKIA_DIR=C:\deps\skia -DSKIA_LIBRARY_DIR=C:\deps\skia\out\Release-x64 -DSKIA_LIBRARY=C:\deps\skia\out\Release-x64\skia.lib -G Ninja ..
          ninja aseprite
      # 将 构建好的 Aseprite 上传到工件以供下载!
      - name: Upload Aseprite Build
        uses: actions/upload-artifact@v4
        with:
          name: Aseprite-Latest
          path: C:\deps\aseprite\build\Binary
          

OK,那么以上是我们的自动化工作流文件!我们将其保存,一旦保存了,那么我估计一手,各位的 Actions 栏应该会变成黄色的指示!这代表了我们的工作流开始运行啦!

随后,我们可以点击 https://github.com/<你的用户名>/<你的仓库名>/actions 下,找到我们的工作流!我们点击工作流,可以看到确实正在顺利的运行啦!但是,还是有一个小问题。。这个大概要多久呢?

其实,说久也不久,说快也不快,大概半个小时应该就可以了!喝一杯咖啡,小酌一下,随后在工作流运行结束后,我们可以回到上述网址,点击工作流,在下面就可以找到我们的生成软件啦!随后我们就可以尽情下载啦!怎么样?是不是很简单?

工作流的注释我都写好了!如果各位想要运行工作流,可以把上述全部复制,也可以仅复制内容而不复制注释!注释仅对所有的 步骤 作解释,对内部的基本原理,各位可以自行查阅 Powershell 的语法规则!

紧接着,我们将 Aseprite 从工作流中下载下来了。紧接着我们解压缩 Aseprite,随后运行!但是此时,我们惊讶的发现,它似乎缺失了一个 dll 文件!就是 libcrypto-3-x64.dll 这个文件!我也不知道是什么情况。。但是我们可以直接 bing 一下这个文件名,随后将这个 dll 文件从任意网站上下载下来,再将其放入与 exe 同级目录即可运行啦!不用放到 C:\Windows 下,只需放入同级目录即可!!

ok 了!那么本次教程到此结束!感谢各位观看!!