mirror of
https://github.com/serai-dex/serai.git
synced 2025-12-09 12:49:23 +00:00
This runs whenever the script is modified, or weekly to ensure the CI doesn't inadvertently decay (due to using the latest packages for a variety of shells). This runs with `sh` (presumably `dash`), `ksh`, `bash`, `dash` (explicitly), `zsh`, `ash` (Busybox), `hush` (Busybox), `mksh`, `yash`, and `brush`. While none of these guarantee this script is POSIX-compliant, as a fully and explicitly-only POSIX-compliant environment is not constructed, this does reasonably test the script itself to be POSIX-compliant. The tools called have been reviewed for being used to the POSIX standard (although not audited to that degree). The script itself is modified with the following changes for compliance with POSIX: 1) `hexdump` is replaced with `od` (`od` suggested by @PlasmaPower) 2) `printf \xFF` replaced with octal escapes, as `\x` is not part of POSIX 3) `head -c` is replaced with `cut`, as the `-c` option is not standardized under POSIX (despite it being present for `tail`). This was identified by @PlasmaPower. As we used `head -c-2` to truncate the last two characters of a string, we now use `wc -c` for a `strlen` to enable the necessary arithmetic to calculate what two bytes in from the end of the string is. This entire effort can be argued pointless, as we could simply run `monerod` on Debian. This script is useful, the journey down the rabbithole of POSIX compliance fascinating, and the methodology applicable to other potential futures though (whether running binaries on Alpine or testing other `sh` scripts for their portability). As part of this effort overall, our CI was extended with `shellcheck` for all `sh` scripts in-tree, including all of our existing `sh` scripts. That there is an actual, direct benefit past this specific effort.
83 lines
3.2 KiB
YAML
83 lines
3.2 KiB
YAML
name: build-dependencies
|
|
description: Installs build dependencies for Serai
|
|
|
|
runs:
|
|
using: "composite"
|
|
steps:
|
|
- name: Remove unused packages
|
|
shell: bash
|
|
run: |
|
|
# Ensure the repositories are synced
|
|
sudo apt update -y
|
|
|
|
# Actually perform the removals
|
|
sudo apt remove -y "*powershell*" "*nuget*" "*bazel*" "*ansible*" "*terraform*" "*heroku*" "*aws*" azure-cli
|
|
sudo apt remove -y "*nodejs*" "*npm*" "*yarn*" "*java*" "*kotlin*" "*golang*" "*swift*" "*julia*" "*fortran*" "*android*"
|
|
sudo apt remove -y "*apache2*" "*nginx*" "*firefox*" "*chromium*" "*chrome*" "*edge*"
|
|
|
|
sudo apt remove -y --allow-remove-essential -f shim-signed *python3*
|
|
# This removal command requires the prior removals due to unmet dependencies otherwise
|
|
sudo apt remove -y "*qemu*" "*sql*" "*texinfo*" "*imagemagick*"
|
|
|
|
# Reinstall python3 as a general dependency of a functional operating system
|
|
sudo apt install -y python3 --fix-missing
|
|
if: runner.os == 'Linux'
|
|
|
|
- name: Remove unused packages
|
|
shell: bash
|
|
run: |
|
|
(gem uninstall -aIx) || (exit 0)
|
|
brew uninstall --force "*msbuild*" "*powershell*" "*nuget*" "*bazel*" "*ansible*" "*terraform*" "*heroku*" "*aws*" azure-cli
|
|
brew uninstall --force "*nodejs*" "*npm*" "*yarn*" "*java*" "*kotlin*" "*golang*" "*swift*" "*julia*" "*fortran*" "*android*"
|
|
brew uninstall --force "*apache2*" "*nginx*" "*firefox*" "*chromium*" "*chrome*" "*edge*"
|
|
brew uninstall --force "*qemu*" "*sql*" "*texinfo*" "*imagemagick*"
|
|
brew cleanup
|
|
if: runner.os == 'macOS'
|
|
|
|
- name: Install dependencies
|
|
shell: bash
|
|
run: |
|
|
if [ "$RUNNER_OS" == "Linux" ]; then
|
|
sudo apt install -y ca-certificates protobuf-compiler libclang-dev
|
|
elif [ "$RUNNER_OS" == "Windows" ]; then
|
|
choco install protoc
|
|
elif [ "$RUNNER_OS" == "macOS" ]; then
|
|
brew install protobuf llvm
|
|
HOMEBREW_ROOT_PATH=/opt/homebrew # Apple Silicon
|
|
if [ $(uname -m) = "x86_64" ]; then HOMEBREW_ROOT_PATH=/usr/local; fi # Intel
|
|
ls $HOMEBREW_ROOT_PATH/opt/llvm/lib | grep "libclang.dylib" # Make sure this installed `libclang`
|
|
echo "DYLD_LIBRARY_PATH=$HOMEBREW_ROOT_PATH/opt/llvm/lib:$DYLD_LIBRARY_PATH" >> "$GITHUB_ENV"
|
|
fi
|
|
|
|
- name: Install solc
|
|
shell: bash
|
|
run: |
|
|
cargo +1.91.1 install svm-rs --version =0.5.22
|
|
svm install 0.8.29
|
|
svm use 0.8.29
|
|
|
|
- name: Remove preinstalled Docker
|
|
shell: bash
|
|
run: |
|
|
docker system prune -a --volumes
|
|
sudo apt remove -y *docker*
|
|
# Install uidmap which will be required for the explicitly installed Docker
|
|
sudo apt install -y uidmap
|
|
if: runner.os == 'Linux'
|
|
|
|
- name: Update system dependencies
|
|
shell: bash
|
|
run: |
|
|
sudo apt update -y
|
|
sudo apt upgrade -y
|
|
sudo apt autoremove -y
|
|
sudo apt clean
|
|
if: runner.os == 'Linux'
|
|
|
|
- name: Install rootless Docker
|
|
uses: docker/setup-docker-action@e61617a16c407a86262fb923c35a616ddbe070b3 # 4.6.0
|
|
with:
|
|
rootless: true
|
|
set-host: true
|
|
if: runner.os == 'Linux'
|