diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 98e321c1b..27a03f0b6 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,398 +1,8 @@ name: CI on: [push] jobs: - - - - cache-submodule: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - run: env/setup.sh - - uses: ./.github/actions/submodule - - - - build-flt-orc: - needs: [cache-submodule] - runs-on: macos-latest - - steps: - - uses: actions/checkout@v4 - - run: env/setup.sh - - uses: ./.github/actions/submodule - - - uses: actions/setup-java@v4 - with: - distribution: 'temurin' - java-version: '11' - - - run: ./app-flutter.sh orchid && cd app-flutter && make - - - - build-ios-app: - needs: [cache-submodule] - runs-on: macos-latest - - steps: - - uses: actions/checkout@v4 - - run: env/setup.sh - - uses: ./.github/actions/submodule - - - run: debug=ldid make -j3 -C app-ios precache='--no-android' - - - build-and-app: - needs: [cache-submodule] - runs-on: ubuntu-latest - - steps: - - run: sudo rm -rf /opt - - - uses: actions/checkout@v4 - - run: env/setup.sh - - uses: ./.github/actions/submodule - - - run: env/setup-ndk.sh - - - run: make -j3 -C app-android precache='--no-ios' - - - uses: actions/upload-artifact@v4 - with: - name: orchid-apk - path: app-android/out-and/Orchid.apk - - - build-and-dkr: - needs: [cache-submodule] - runs-on: ubuntu-latest - - steps: - - run: sudo rm -rf /opt - - - uses: actions/checkout@v4 - - run: env/setup-git.sh - - uses: ./.github/actions/submodule - - - run: cd app-android && env/docker.sh -j3 - - - - build-mac-app: - needs: [cache-submodule] - runs-on: macos-latest - - steps: - - uses: actions/checkout@v4 - - run: env/setup.sh - - uses: ./.github/actions/submodule - - - run: debug=ldid make -j3 -C app-macos precache='--no-android --no-ios --macos' - - - build-mac-snd: - needs: [cache-submodule] - runs-on: macos-latest - - steps: - - uses: actions/checkout@v4 - - run: env/setup.sh - - uses: ./.github/actions/submodule - - - run: make -j3 -C eth-sender - - - uses: actions/upload-artifact@v4 - with: - name: cj-mac - path: eth-sender/out-mac/x86_64/cj - - - build-mac-cli: - needs: [cache-submodule] - runs-on: macos-latest - - steps: - - uses: actions/checkout@v4 - - run: env/setup.sh - - uses: ./.github/actions/submodule - - - run: make -j3 -C cli-shared - - - uses: actions/upload-artifact@v4 - with: - name: orchidcd-mac - path: cli-shared/out-mac/x86_64/orchidcd - - - build-mac-srv: - needs: [cache-submodule] - runs-on: macos-13 - - if: ${{ false }} # XXX: Hypervisor.framework - steps: - - uses: actions/checkout@v4 - - run: env/setup.sh - - uses: ./.github/actions/submodule - - - uses: ./.github/actions/nerdctl - - - run: make -j3 -C srv-daemon - - - uses: actions/upload-artifact@v4 - with: - name: orchidd-mac - path: srv-daemon/out-mac/x86_64/orchidd - - - run: git status - - - - build-win-app: - needs: [cache-submodule] - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - run: env/setup.sh - - uses: ./.github/actions/submodule - - - run: DEBIAN_FRONTEND=noninteractive sudo -EH apt-get -y install mingw-w64 - - - run: debug=crossndk make -j3 -C app-windows ./env/dotdot/gui-orchid/.flutter-plugins - - run: debug=crossndk make -j3 -C app-windows target=win precache='--no-android --no-ios --windows -a' - - - uses: actions/upload-artifact@v4 - with: - name: orchid-win - path: app-windows/out-win/package - - - build-win-snd: - needs: [cache-submodule] - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - run: env/setup.sh - - uses: ./.github/actions/submodule - - - run: DEBIAN_FRONTEND=noninteractive sudo -EH apt-get -y install mingw-w64 - - - run: make -j3 -C eth-sender target=win - - - uses: actions/upload-artifact@v4 - with: - name: cj-win - path: eth-sender/out-win/x86_64/cj.exe - - - build-win-cli: - needs: [cache-submodule] - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - run: env/setup.sh - - uses: ./.github/actions/submodule - - - run: DEBIAN_FRONTEND=noninteractive sudo -EH apt-get -y install mingw-w64 - - - run: make -j3 -C cli-shared target=win - - - uses: actions/upload-artifact@v4 - with: - name: orchidcd-win - path: cli-shared/out-win/x86_64/orchidcd.exe - - - build-win-srv: - needs: [cache-submodule] - runs-on: macos-13 - - if: ${{ false }} # XXX: use Hyper-V - steps: - - uses: actions/checkout@v4 - - run: env/setup.sh - - uses: ./.github/actions/submodule - - - uses: ./.github/actions/nerdctl - - run: brew install mingw-w64 coreutils - - - run: make -j3 -C srv-daemon target=win - - - uses: actions/upload-artifact@v4 - with: - name: orchidd-w64 - path: srv-daemon/out-win/x86_64/orchidd.exe - - - run: git status - - - - build-lnx-app: - needs: [cache-submodule] - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - run: env/setup.sh - - uses: ./.github/actions/submodule - - - run: debug=crossndk make -j3 -C app-linux ./env/dotdot/gui-orchid/.flutter-plugins - - run: debug=crossndk make -j3 -C app-linux precache='--no-android --no-ios --linux' - - - uses: actions/upload-artifact@v4 - with: - name: orchid-lnx - path: app-linux/out-lnx/package - - - build-lnx-tst: - needs: [cache-submodule] - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - run: env/setup.sh - - uses: ./.github/actions/submodule - - - run: debug=crossndk make -j3 -C tst-network - - - build-lnx-cli: - needs: [cache-submodule] - runs-on: ubuntu-latest - - strategy: - fail-fast: false - matrix: - machine: [x86_64, arm64, armhf] - - steps: - - uses: actions/checkout@v4 - - run: env/setup.sh - - uses: ./.github/actions/submodule - - - run: debug=crossndk make -j3 -C cli-shared machine=${{ matrix.machine }} - - - uses: actions/upload-artifact@v4 - with: - name: orchidcd-lnx-${{ matrix.machine }} - path: cli-shared/out-lnx/${{ matrix.machine }}/orchidcd - - - build-lnx-srv: - needs: [cache-submodule] - runs-on: ubuntu-latest - - strategy: - fail-fast: false - matrix: - # XXX: armhf is missing rcrt1.o - machine: [x86_64, arm64] - - steps: - - uses: actions/checkout@v4 - - run: env/setup.sh - - uses: ./.github/actions/submodule - - - run: env/setup-ndk.sh - - - run: debug=crossndk make -j3 -C srv-daemon machine=${{ matrix.machine }} - - - uses: actions/upload-artifact@v4 - with: - name: orchidd-lnx-${{ matrix.machine }} - path: srv-daemon/out-lnx/${{ matrix.machine }}/orchidd - if: ${{ matrix.machine != 'x86_64' }} - - - run: git status - - - build-lnx-dkr: - needs: [cache-submodule] - runs-on: ubuntu-latest - - steps: - - run: sudo rm -rf /opt - - - uses: actions/checkout@v4 - - run: env/setup-git.sh - - uses: ./.github/actions/submodule - - - run: cd srv-daemon && env/docker.sh -j3 - - - build-lnx-bld: - needs: [cache-submodule] - runs-on: ubuntu-latest - - steps: - - run: sudo rm -rf /opt - - - uses: actions/checkout@v4 - - - run: docker build --build-arg GIT_REPOSITORY=https://github.com/${{ github.repository }}.git --build-arg GIT_COMMIT=${{ github.sha }} --build-arg GIT_SETUP=env/setup-git.sh -t orchidd:latest srv-docker - - run: docker save -o orchidd.tar orchidd:latest - - - uses: actions/upload-artifact@v4 - with: - name: orchidd-dkr - path: orchidd.tar - - build-lnx-mac: - needs: [cache-submodule] - runs-on: macos-13 - + runs-on: macos-12 steps: - uses: actions/checkout@v4 - - run: env/setup.sh - - uses: ./.github/actions/submodule - - - uses: ./.github/actions/nerdctl - - run: env/setup-ndk.sh - - - run: gmake -j3 -C srv-daemon target=lnx - - - uses: actions/upload-artifact@v4 - with: - name: orchidd-lnx-amd64 - path: srv-daemon/out-lnx/x86_64/orchidd - - - build-lnx-bad: - needs: [cache-submodule] - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - run: env/setup.sh - - uses: ./.github/actions/submodule - - - run: make -j3 -C srv-daemon - - - build-lnx-all: - needs: [build-lnx-mac, build-lnx-bld] - runs-on: ubuntu-latest - - steps: - - uses: actions/download-artifact@v4 - with: - name: orchidd-dkr - - run: tar -xvf orchidd.tar - - run: tar -xvf "$(jq -r '.[0].Layers | .[]' manifest.json | tail -n1)" - - - uses: actions/download-artifact@v4 - with: - name: orchidd-lnx-amd64 - - - run: chmod +x orchidd - - run: diff -u <(./usr/sbin/orchidd --version) <(./orchidd --version) - - run: diff -u <(xxd usr/sbin/orchidd) <(xxd orchidd) - - - + - run: env/setup-mac.sh diff --git a/env/export.sh b/env/export.sh index 8589025dc..c06965d05 100755 --- a/env/export.sh +++ b/env/export.sh @@ -1,4 +1,9 @@ #!/bin/bash -set -e +set -ex +EC() { echo -e '\e[1;33m'code $?'\e[m\n'; dmesg; } +trap EC ERR "$@" -tar -czf /tmp/export.tgz -C / --one-file-system --exclude=./tmp . +echo BEFORE +ls -la /tmp/export.tgz +tar -vczf /tmp/export.tgz -C / --one-file-system --exclude=./tmp . +echo AFTER diff --git a/env/setup-mac.sh b/env/setup-mac.sh index 9de388998..e9d355c4c 100755 --- a/env/setup-mac.sh +++ b/env/setup-mac.sh @@ -1,18 +1,8 @@ #!/bin/bash -set -e -which brew &>/dev/null || /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" - -# XXX: duplicate linux setup as much as possible -brew install \ - fakeroot \ - rpm2cpio zstd \ - binutils \ - mingw-w64 \ - python-packaging \ - groff \ - autoconf{,-archive} automake libtool \ - make meson ninja pkg-config \ - rustup-init \ - -rustup-init -y --no-modify-path --no-update-default-toolchain -env/setup-all.sh +set -ex +brew install fakeroot +pwd +whoami +id +printenv +base -x fakeroot /bin/ls diff --git a/env/setup-sys.sh b/env/setup-sys.sh index 8c0d5ef09..0c436037a 100755 --- a/env/setup-sys.sh +++ b/env/setup-sys.sh @@ -1,9 +1,11 @@ #!/bin/bash -set -e +set -ex +EC() { echo -e '\e[1;33m'code $?'\e[m\n'; } +trap EC ERR llvm=$1 shift 1 export DEBIAN_FRONTEND=noninteractive -apt-get -y update +apt-get -y -oDebug::pkgAcquire::Worker=1 update apt-get -y dist-upgrade apt-get -y install --no-install-recommends libstdc++-"${llvm}"-dev{,-{arm{hf,64},i386}-cross} "$@" for root in /usr/*-gnu*; do diff --git a/env/setup.sh b/env/setup.sh index aeb06faa2..832315e04 100755 --- a/env/setup.sh +++ b/env/setup.sh @@ -1,4 +1,3 @@ #!/bin/bash set -e env/"uname-$(uname -s).sh" -env/setup-git.sh diff --git a/env/sys-ubuntu.sh b/env/sys-ubuntu.sh index 11a912003..2ce61dedc 100755 --- a/env/sys-ubuntu.sh +++ b/env/sys-ubuntu.sh @@ -1,6 +1,7 @@ #!/bin/bash -set -e +set -ex set -o pipefail +fakeroot ls -la sysroot=$1 distro=$2 @@ -11,6 +12,7 @@ mount=${PWD}/env rm -rf "${sysroot}" mkdir -p "${sysroot}" pushd "${sysroot}" +fakeroot ls -la # docker does not work inside of docker. proot apt/dpkg only works on Linux # XXX: this is only barely deterministic. it doesn't even have a lock file! @@ -33,7 +35,9 @@ if [[ $(uname -s) = Linux ]]; then echo "deb http://archive.ubuntu.com/ubuntu/ ${distro}-updates main universe" >>etc/apt/sources.list HOME= "${proot}" -S . -w / -b "${mount}:/mnt" /mnt/setup-sys.sh "$@" else + fakeroot ls -la # https://stackoverflow.com/questions/29934204/mount-data-volume-to-docker-with-readwrite-permission + ls -la /tmp/lima if [[ -d /tmp/lima ]]; then tarball=/tmp/lima/export-$$.tgz else @@ -44,9 +48,14 @@ else clean() { rm -f "${tarball}"; } trap clean EXIT + ls -la "${tarball}" ${ENV_DOCKER:=docker} run --platform linux/amd64 -i --rm \ -v "${mount}:/mnt" -v "${tarball}:/tmp/export.tgz" \ ubuntu:"${distro}" /mnt/export.sh /mnt/setup-sys.sh "$@" + ls -la "${tarball}" + test -s "${tarball}" + tar -vxf "${tarball}" + fakeroot ls -la fakeroot tar --exclude dev -vxzmf "${tarball}" fi