diff --git a/.github/workflows/guix.yml b/.github/workflows/guix.yml new file mode 100644 index 0000000..a5ae264 --- /dev/null +++ b/.github/workflows/guix.yml @@ -0,0 +1,94 @@ +name: ci/gh-actions/guix + +on: + push: + +env: + APT_SET_CONF: | + echo "Acquire::Retries \"3\";" | sudo tee -a /etc/apt/apt.conf.d/80-custom + echo "Acquire::http::Timeout \"120\";" | sudo tee -a /etc/apt/apt.conf.d/80-custom + echo "Acquire::ftp::Timeout \"120\";" | sudo tee -a /etc/apt/apt.conf.d/80-custom +jobs: + build-cross: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + toolchain: + - name: "x86_64-linux-gnu" + host: "x86_64-linux-gnu" + - name: "x86_64-linux-gnu.no-tor-bundle" + host: "x86_64-linux-gnu.no-tor-bundle" + - name: "aarch64-linux-gnu" + host: "aarch64-linux-gnu" + - name: "arm-linux-gnueabihf" + host: "arm-linux-gnueabihf" + - name: "riscv64-linux-gnu" + host: "riscv64-linux-gnu" + - name: "x86_64-w64-mingw32" + host: "x86_64-w64-mingw32" + - name: "x86_64-w64-mingw32.installer" + host: "x86_64-w64-mingw32.installer" + - name: "x86_64-apple-darwin" + host: "x86_64-apple-darwin" + - name: "arm64-apple-darwin" + host: "arm64-apple-darwin" + name: ${{ matrix.toolchain.name }} + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + submodules: recursive + - name: guix cache + uses: actions/cache@v3 + with: + path: | + gnu/store + guix_db.sqlite + key: depends-${{ matrix.toolchain.host }}-${{ hashFiles('contrib/guix/manifest.scm') }} + restore-keys: | + depends-${{ matrix.toolchain.host }}-${{ hashFiles('contrib/guix/manifest.scm') }} + depends-${{ matrix.toolchain.host }}- + - name: move guix store + run: | + if [[ -e "guix_db.sqlite" ]]; then + sudo mkdir -p /var/guix/db + sudo mv gnu /gnu + sudo cp guix_db.sqlite /var/guix/db/db.sqlite + + sudo chmod 1775 /gnu/store + sudo chown 0644 /var/guix/db/db.sqlite + sudo chown -R root:root /gnu/store /var/guix/db/db.sqlite + fi + - name: depends cache + uses: actions/cache@v3 + with: + path: contrib/depends/built + key: depends-${{ matrix.toolchain.host }}-${{ hashFiles('contrib/depends/packages/*') }} + restore-keys: | + depends-${{ matrix.toolchain.host }}-${{ hashFiles('contrib/depends/packages/*') }} + depends-${{ matrix.toolchain.host }}- + - name: depends sources cache + uses: actions/cache@v3 + with: + path: contrib/depends/sources + key: depends-${{ matrix.toolchain.host }}-${{ hashFiles('contrib/depends/packages/*') }} + restore-keys: | + depends-${{ matrix.toolchain.host }}-${{ hashFiles('contrib/depends/packages/*') }} + depends-${{ matrix.toolchain.host }}- + - name: set apt conf + run: ${{env.APT_SET_CONF}} + - name: install dependencies + run: sudo apt update; sudo apt -y install guix git ca-certificates ${{ matrix.toolchain.packages }} + - name: build + run: SUBSTITUTE_URLS='http://ci.guix.gnu.org' HOSTS="${{ matrix.toolchain.host }}" JOBS=2 ./contrib/guix/guix-build + - uses: actions/upload-artifact@v3 + with: + name: ${{ matrix.toolchain.name }} + path: | + guix/guix-build-*/output/${{ matrix.toolchain.host }}/* + - name: prepare guix store for caching + run: | + sudo systemctl stop guix-daemon + sudo mv /gnu gnu + sudo mv /var/guix/db/db.sqlite guix_db.sqlite \ No newline at end of file diff --git a/contrib/guix/guix-build b/contrib/guix/guix-build index 0f80300..518379e 100755 --- a/contrib/guix/guix-build +++ b/contrib/guix/guix-build @@ -353,6 +353,7 @@ EOF --container \ --pure \ --no-cwd \ + ${SUBSTITUTE_URLS:+--substitute-urls="$SUBSTITUTE_URLS"} \ -- env HOST="$HOST"