crosstool-ng/.github/workflows/continuous-integration-workflow.yml
Quentin Boswank cf6b1740a1 Add more caching to the CI
more specificaly to the tarballs download. The function CT_Fetch now
touches the already existing files to be comparable to the not used ones
that can araise when a package is updated.
This comparsion is needed because if it would not exist the tarball
would grow in size due to not used but still cached packages.
This would take time but is definitly something to worry about.

Signed-off-by: Quentin Boswank <qubos@outlook.de>
2023-10-04 16:12:23 +13:00

141 lines
4.5 KiB
YAML

---
name: CI
on:
push:
pull_request:
jobs:
crosstool:
runs-on: ${{ matrix.host }}
strategy:
matrix:
host: ["ubuntu-22.04", "macos-latest"]
steps:
- name: "clone"
uses: actions/checkout@v3
- name: "prereq Linux"
if: ${{ runner.os == 'Linux' }}
run: |
sudo apt-get install -y gperf help2man libtool-bin meson ninja-build
- name: "prereq macOS"
if: ${{ runner.os == 'macOS' }}
run: |
brew install autoconf automake bash binutils gawk gnu-sed \
gnu-tar help2man make ncurses
- name: "build ct-ng"
run: |
if [ "$RUNNER_OS" == "macOS" ]; then
export PATH="$PATH:/usr/local/opt/binutils/bin"
export CPPFLAGS="-I/usr/local/opt/ncurses/include -I/usr/local/opt/gettext/include"
export LDFLAGS="-L/usr/local/opt/ncurses/lib -L/usr/local/opt/gettext/lib"
fi
./bootstrap
./configure --prefix=$PWD/.local/
make
make install
tar -cf ct-ng.tar .local/
- name: "upload ct-ng"
uses: actions/upload-artifact@v3
with:
name: crosstool.${{ matrix.host }}
path: ct-ng.tar
- name: "upload config.log"
uses: actions/upload-artifact@v3
with:
name: config.log.${{ matrix.host }}
path: config.log
if: ${{ always() }}
tarballs:
needs: crosstool
runs-on: ${{ matrix.host }}
strategy:
matrix:
host: ["ubuntu-22.04"]
steps:
- name: "download ct-ng"
uses: actions/download-artifact@v3
with:
name: crosstool.${{ matrix.host }}
- name: "extract ct-ng"
run: |
tar -xf ct-ng.tar
- name: cache tarballs
id: cache
uses: actions/cache@v3
with:
path: src.tar
key: src.tar-${{ hashFiles('.local/share/crosstool-ng/packages') }}-${{ hashFiles('.local/share/crosstool-ng/samples') }}
restore-keys: |
src.tar-${{ hashFiles('.local/share/crosstool-ng/packages') }}-
src.tar-
- name: extract tarballs
run: |
tar -xvf src.tar || true
touch stamp
- name: "prereq Linux"
if: ${{ runner.os == 'Linux' }}
run: |
sudo apt-get install -y gperf help2man libtool-bin
echo "$GITHUB_WORKSPACE/.local/bin" >> $GITHUB_PATH
- name: "ct-ng source"
run: |
mkdir -p src
for sample in aarch64-unknown-linux-gnu arm-picolibc-eabi \
arm-unknown-linux-musleabi armv6-nommu-linux-uclibcgnueabi \
x86_64-w64-mingw32; do \
ct-ng $sample; \
sed -i -e '/CT_LOG_PROGRESS_BAR/s/y$/n/' .config; \
sed -i -e '/CT_LOCAL_TARBALLS_DIR/s/HOME/CT_TOP_DIR/' .config; \
sed -i -e '/CT_PREFIX_DIR/s/HOME/CT_TOP_DIR/' .config; \
sed -i -e 's/^.*CT_COMP_TOOLS_BISON.*$/CT_COMP_TOOLS_BISON=y/' .config; \
sed -i -e 's/^.*CT_COMP_TOOLS_M4.*$/CT_COMP_TOOLS_M4=y/' .config; \
sed -i -e 's/^.*CT_COMP_TOOLS_MAKE.*$/CT_COMP_TOOLS_MAKE=y/' .config; \
ct-ng olddefconfig; \
ct-ng source; \
done
find src -type f -not -newer stamp -delete -print
tar -cvf src.tar src
toolchains:
needs: [crosstool, tarballs]
uses: ./.github/workflows/build-toolchains.yml
with:
samples: >-
[
"aarch64-unknown-linux-gnu",
"arc-multilib-elf32",
"arc-multilib-linux-gnu",
"arc-multilib-linux-uclibc",
"arm-picolibc-default",
"arm-unknown-linux-gnueabi",
"arm-unknown-linux-musleabi",
"armv6-nommu-linux-uclibcgnueabi",
"avr",
"i686-w64-mingw32",
"loongarch64-unknown-linux-gnu",
"mips-unknown-elf",
"mips-unknown-linux-gnu",
"mips64-unknown-linux-gnu",
"powerpc-unknown-linux-gnu",
"powerpc64-unknown-linux-gnu",
"riscv32-unknown-elf",
"riscv64-unknown-elf",
"s390-unknown-linux-gnu",
"sh-unknown-elf",
"sparc-unknown-linux-gnu",
"x86_64-multilib-linux-uclibc",
"x86_64-unknown-linux-gnu",
"x86_64-w64-mingw32",
"xtensa-fsf-linux-uclibc"
]
canadian-cross:
needs: [toolchains]
uses: ./.github/workflows/build-toolchains.yml
with:
samples: >-
["x86_64-w64-mingw32,x86_64-pc-linux-gnu"]
canadian-cross: true