Add migration script #1086
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: build_and_test | |
| on: [push, pull_request, workflow_dispatch] | |
| env: | |
| CCACHE_DIR: ${{ github.workspace }}/.ccache" | |
| jobs: | |
| build_and_test: | |
| runs-on: ubuntu-24.04 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| submodules: true | |
| - name: generate deps cache key | |
| id: deps-cache-key | |
| run: | | |
| # Generate a hash based on all submodule SHAs | |
| DEPS_HASH=$(git submodule status | sha256sum | cut -d' ' -f1) | |
| echo "hash=$DEPS_HASH" >> $GITHUB_OUTPUT | |
| - name: cache deps build artifacts | |
| id: deps-cache | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| deps/llvm-build | |
| deps/boringssl/build | |
| deps/libsodium/build | |
| deps/ekam/bin | |
| tmp/.deps | |
| key: deps-${{ runner.os }}-${{ steps.deps-cache-key.outputs.hash }} | |
| - name: setup python 3.10 | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.10' | |
| - name: install dependencies | |
| run: | | |
| export DEBIAN_FRONTEND=noninteractive | |
| echo "The build of boringssl requires golang." | |
| echo "The github runner seems to have some version of golang already; installing golang-go breaks." | |
| which go || sudo apt-get install golang-go | |
| sudo apt-get install -y build-essential libcap-dev xz-utils zip unzip strace curl discount git python3 zlib1g-dev cmake ccache | |
| # Install OpenSSL 1.1 (required for Meteor/Node compatibility) | |
| # Ubuntu 24.04 only ships OpenSSL 3.x, so we need to install 1.1 from older release | |
| wget http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2_amd64.deb | |
| sudo dpkg -i libssl1.1_1.1.1f-1ubuntu2_amd64.deb | |
| rm libssl1.1_1.1.1f-1ubuntu2_amd64.deb | |
| # Ubuntu 24.04 restricts unprivileged user namespaces by default via AppArmor | |
| # Sandstorm requires user namespaces for sandboxing, so disable this restriction | |
| echo "kernel.apparmor_restrict_unprivileged_userns = 0" | sudo tee /etc/sysctl.d/99-userns.conf | |
| sudo sysctl --system | |
| - name: install meteor | |
| run: | | |
| curl https://install.meteor.com/ | sh | |
| - name: cache ccache files | |
| uses: actions/cache@v4 | |
| with: | |
| path: ${{ env.CCACHE_DIR }} | |
| key: ccache-${{ github.run_number }} | |
| restore-keys: ccache- | |
| - name: print and zero ccache stats | |
| run: | | |
| mkdir -p "$CCACHE_DIR" | |
| ccache -s | |
| ccache -z | |
| - name: make fast | |
| run: | | |
| set -x | |
| export CCACHE_COMPRESS="true" | |
| export CCACHE_COMPRESSLEVEL="6" | |
| export CCACHE_MAXSIZE="1G" | |
| # export CCACHE_DEBUG=1 | |
| export CCACHE_SLOPPINESS="time_macros" | |
| export PATH=/usr/lib/ccache:$CLANGDIR:$PATH | |
| # Use Python 3.10 for node-gyp (3.11+ removed 'rU' mode) | |
| export npm_config_python=$(which python) | |
| make \ | |
| CC="$(which clang)" \ | |
| CXX="$(which clang++)" \ | |
| fast | |
| - name: print ccache stats | |
| run: | | |
| ccache -s | |
| # # for debugging ccache misses | |
| # find . -iname *ccache* | tar -czf ccache-debug.tar.gz -T /dev/stdin | |
| #- name: upload ccache debug tarball | |
| # uses: actions/upload-artifact@v1 | |
| # with: | |
| # name: ccache-debug.tar.gz | |
| # path: ccache-debug.tar.gz | |
| - name: upload sandstorm tarball | |
| if: always() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: sandstorm-0-fast.tar.xz | |
| path: sandstorm-0-fast.tar.xz | |
| - name: typecheck-ts | |
| run: make typecheck-ts | |
| - name: lint | |
| run: | | |
| # In addition to making sure the linting step doesn't flag any errors, | |
| # we also want to make sure the number of warnings doesn't increase. | |
| # We check for equality; if the number decreases, great! But then update | |
| # the constant below. | |
| make lint | tee lint.log | |
| num_problems=$(cat lint.log | grep ' problems (0 errors, ' | awk '{print $2}') | |
| [ "$num_problems" = 775 ] | |
| - name: setup java 11 | |
| uses: actions/setup-java@v4 | |
| with: | |
| distribution: 'temurin' | |
| java-version: '11' | |
| - name: setup chrome | |
| uses: browser-actions/setup-chrome@v1 | |
| with: | |
| chrome-version: 142 | |
| - name: remove system chrome | |
| run: | | |
| sudo rm -f /usr/bin/google-chrome /usr/bin/google-chrome-stable | |
| sudo rm -rf /opt/google/chrome | |
| - name: test | |
| run: | | |
| set -o pipefail | |
| (make test |& tee testlog.txt; echo "Result: $?") | |
| - name: upload test log | |
| if: always() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: testlog.txt | |
| path: testlog.txt | |
| - name: upload screenshots | |
| if: always() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: screenshots | |
| path: tests/screenshots |