GitHub 动作:自制程序慢

GitHub Actions: homebrew slow

我一生中从未使用过 macOS,所以我不确定这是否是 GitHub 操作使用的图像、自制程序本身或我如何使用它的问题:

我正在尝试使用 GitHub 操作在 Ubuntu 和 macOS 上构建和测试 C++ 项目。在这两种情况下,使用 CMake 构建代码只需要大约一分钟,但是,安装依赖项(Boost 和 Lua)在 macOS 上需要三分钟多,而在 Ubuntu 上需要 20 秒。我的 workflow.yml 看起来如下:

jobs:
  build-and-test:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest, macos-latest]
        include:
        - os: ubuntu-latest
          INSTALL_DEPS: sudo apt-get install -yq libboost-dev libboost-graph-dev lua5.3 liblua5.3-dev
          CC: gcc
          CXX: g++
        - os: macos-latest
          INSTALL_DEPS: brew install boost lua
          CC: clang
          CXX: clang++
    steps:
      - uses: actions/checkout@v2
      - name: install-dependencies
        run: ${{ matrix.INSTALL_DEPS }}
      # ...

似乎 boost 是我可以使用自制软件安装的唯一软件包,而不是更精细的 libboost-dev + libboost-graph-dev.

如果我不想在 macOS 上从源代码构建 Boost,我可以在这里做些什么吗?我知道可以使用 GitHub 操作来缓存依赖项,但这对于我的用例来说似乎过于复杂,而且我实际上不知道如何在第一种情况下将其与自制软件一起使用。

我做了一个小测试来检查在 Ubuntu

上使用 brew 需要多长时间
jobs:
  build-and-test:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest, macos-latest]
        include:
        - os: ubuntu-latest
          INSTALL_DEPS: /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" && date && brew install boost lua && date
          #INSTALL_DEPS: sudo apt-get install -yq libboost-dev libboost-graph-dev lua5.3 liblua5.3-dev
          CC: gcc
          CXX: g++
        - os: macos-latest
          INSTALL_DEPS: brew install boost lua
          CC: clang
          CXX: clang++
    steps:
      - uses: actions/checkout@v2
      - name: install-dependencies
        run: ${{ matrix.INSTALL_DEPS }}

然后到运行brew install boost lua大概用了26秒

Fri Dec 18 11:16:02 UTC 2020
Fri Dec 18 11:16:28 UTC 2020

我在 MacOS 上的哪个位置获得了 2:3346s45s。因此,与最高值相比,这是一个很大的区别。但是将 45s 与 26s 进行比较则不然(仍然差不多是 2 倍,但听起来并没有那么糟糕)。我认为优化它实际上没有意义。可能有很多方面可能会产生影响,甚至这条消息也可能对此产生影响

如果您正在以良好的方式完成管道,请专注于此,因为您可能会浪费大量时间争取最佳性能而运气不佳,因为某些方面可能超出您的控制。