name: Check code style and build on: push: branches: - main pull_request: defaults: run: shell: bash -euxo pipefail {0} concurrency: # Allow only one workflow per any non-`main` branch. group: ${{ github.workflow }}-${{ github.ref }}-${{ github.ref == 'refs/heads/main' && github.sha || 'anysha' }} cancel-in-progress: true env: RUST_BACKTRACE: 1 COPT: '-Werror' jobs: check-codestyle-rust: strategy: fail-fast: false matrix: # XXX: both OSes have rustup # * https://github.com/actions/runner-images/blob/main/images/macos/macos-12-Readme.md#rust-tools # * https://github.com/actions/runner-images/blob/main/images/linux/Ubuntu2204-Readme.md#rust-tools # this is all we need to install our toolchain later via rust-toolchain.toml # so don't install any toolchain explicitly. os: [ubuntu-latest, macos-latest] # To support several Postgres versions, add them here. postgres_version: [v14, v15] timeout-minutes: 60 name: check codestyle rust and postgres runs-on: ${{ matrix.os }} steps: - name: Checkout uses: actions/checkout@v2 with: submodules: true fetch-depth: 2 - name: Check formatting run: cargo fmt --all -- --check - name: Install Ubuntu postgres dependencies if: matrix.os == 'ubuntu-latest' run: | sudo apt update sudo apt install build-essential libreadline-dev zlib1g-dev flex bison libseccomp-dev libssl-dev - name: Install macOS postgres dependencies if: matrix.os == 'macos-latest' run: brew install flex bison openssl - name: Set pg revision for caching id: pg_ver run: echo ::set-output name=pg_rev::$(git rev-parse HEAD:vendor/postgres-${{matrix.postgres_version}}) - name: Cache postgres ${{matrix.postgres_version}} build id: cache_pg uses: actions/cache@v3 with: path: | pg_install/${{matrix.postgres_version}} key: ${{ runner.os }}-pg-${{ steps.pg_ver.outputs.pg_rev }} - name: Set extra env for macOS if: matrix.os == 'macos-latest' run: | echo 'LDFLAGS=-L/usr/local/opt/openssl@3/lib' >> $GITHUB_ENV echo 'CPPFLAGS=-I/usr/local/opt/openssl@3/include' >> $GITHUB_ENV - name: Build postgres if: steps.cache_pg.outputs.cache-hit != 'true' run: make postgres - name: Build neon extensions run: make neon-pg-ext # Plain configure output can contain weird errors like 'error: C compiler cannot create executables' # and the real cause will be inside config.log - name: Print configure logs in case of failure if: failure() continue-on-error: true run: | echo '' && echo '=== Postgres ${{matrix.postgres_version}} config.log ===' && echo '' cat pg_install/build/${{matrix.postgres_version}}/config.log echo '' && echo '=== Postgres ${{matrix.postgres_version}} configure.log ===' && echo '' cat pg_install/build/${{matrix.postgres_version}}/configure.log - name: Cache cargo deps id: cache_cargo uses: actions/cache@v3 with: path: | ~/.cargo/registry !~/.cargo/registry/src ~/.cargo/git target key: v4-${{ runner.os }}-cargo-${{ hashFiles('./Cargo.lock') }}-rust - name: Run cargo clippy run: ./run_clippy.sh - name: Ensure all project builds run: cargo build --locked --all --all-targets check-codestyle-python: runs-on: [ self-hosted, Linux, k8s-runner ] steps: - name: Checkout uses: actions/checkout@v3 with: submodules: false fetch-depth: 1 - name: Cache poetry deps id: cache_poetry uses: actions/cache@v3 with: path: ~/.cache/pypoetry/virtualenvs key: v1-codestyle-python-deps-${{ hashFiles('poetry.lock') }} - name: Install Python deps run: ./scripts/pysync - name: Run isort to ensure code format run: poetry run isort --diff --check . - name: Run black to ensure code format run: poetry run black --diff --check . - name: Run flake8 to ensure code format run: poetry run flake8 . - name: Run mypy to check types run: poetry run mypy .