Github动作和跨平台构建

哈Ha 本文是关于如何使用github操作在所有平台上建立构建。


背景知识


我用电子编写了一个简单的应用程序,我自己使用linux,但我的朋友更喜欢macOS。 当我尝试在计算机上编译macOS并将pkg交给我的朋友时-它没有启动。 结果,事实证明,为macOS编译应用程序的唯一选择是在macOS上编译它。 为了使任务尽可能简单,我制作了三个脚本:build:linux,build:mac,build:win。 结果,在编译之后,获得了以下文件:linux.deb,linux.AppImage,mac.pkg,win.exe。 但是仍然存在一个需要在不同系统上进行编译的问题。 然后拯救gihub行动。


一切应该如何运作


我按下github上的新发行版按钮,然后魔术在github动作上启动工作流,它在所有操作系统上编译并将二进制文件添加到发行版中


我使用https://github.com/JasonEtco/upload-to-releas添加要发布的文件,但是此操作存在一个问题。 这是一个容器操作,在github操作中,容器操作仅在linux上可用。 因此,决定使用四个作业,其中三个用于编译,另一个用于加载。 由于没有为每个作业保存环境,因此这就是为什么使用工件在它们之间进行交换的原因


练习


首先,在包含内容的.github / workflows / workflow.yml文件夹中


name: CI on: release 

好吧,我认为这很明显是CI工作流程,它将在发布时启动,现在是最重要的工作


 jobs: build-linux: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - name: Install bluetooth run: sudo apt-get install -y build-essential libbluetooth-dev - name: Install dependencies run: npm install - name: Build linux run: npm run build:linux - name: Creating out run: | mkdir out cp dist/linux.AppImage out/ cp dist/linux.deb out/ - name: Upload build uses: actions/upload-artifact@master with: name: linux path: out 

作业步骤:这是所有工作,在linux下运行:这是名称为linux的工作在运行:ubuntu-latest表示您需要在最新的ubuntu下运行所有​​内容


然后是最有趣的步骤:这是我们工作的全部内容


首先-使用:ations / checkout @ v1克隆存储库,以便我们可以使用它。 下一步“安装蓝牙”将安装蓝牙,因为项目使用了它。 接下来,建立依赖关系并进行构建。 由于在dist文件夹中构建后,不仅存在二进制文件,而且还存在不必要的垃圾,因此下一步是创建仅包含二进制文件的另一个文件夹,然后将其加载到工件中。


MacOS赢奖几乎相同


  build-mac: runs-on: macOS-latest steps: - uses: actions/checkout@v1 - uses: actions/setup-node@v1 with: node-version: '8.x' - name: Install dependencies run: npm install - name: Build mac run: npm run build:mac - name: Creating out run: | mkdir out cp dist/mac.pkg out/ - name: Upload build uses: actions/upload-artifact@master with: name: mac path: out build-win: runs-on: windows-latest steps: - uses: actions/checkout@v1 - uses: actions/setup-node@v1 with: node-version: '8.x' - name: Install dependencies run: npm install - name: Build win run: npm run build:win - name: Creating out run: | mkdir out copy dist\win.exe out\ - name: Upload build uses: actions/upload-artifact@master with: name: win path: out 

但是,值得注意一些差异。 首先,您不需要安装蓝牙,因为它已经安装了,但是,您需要为此安装nodejs,使用actions / setup-node。 此外,Windows在“创建”阶段使用其他命令。


当然,最后阶段是将文件上传到发行版


 upload: runs-on: ubuntu-latest needs: [build-linux, build-mac, build-win] steps: - uses: actions/checkout@v1 - name: Download linux artifact uses: actions/download-artifact@master with: name: linux - name: Download mac artifact uses: actions/download-artifact@master with: name: mac - name: Download win artifact uses: actions/download-artifact@master with: name: win - name: Upload to Release deb uses: JasonEtco/upload-to-release@v0.1.1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: args: linux/linux.deb application/vnd.debian.binary-package - name: Upload to Release AppImage uses: JasonEtco/upload-to-release@v0.1.1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: args: linux/linux.AppImage application/x-executable - name: Upload to Release pkg uses: JasonEtco/upload-to-release@v0.31.1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: args: mac/mac.pkg application/x-xar - name: Upload to Release exe uses: JasonEtco/upload-to-release@v0.1.1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: args: win/win.exe application/octet-stream 

最重要的部分是需求,这一行说,只有在所有构建之后(如果构建并行进行),才需要开始工作,然后我们首先下载工件,然后将它们中的二进制文件添加到发行版中


参考文献


生成的workflow.yml文件


资料库


有关github操作的更多信息


感谢您的关注!

Source: https://habr.com/ru/post/zh-CN466501/


All Articles