Skip to content

fix misplaced LineOffset and LineGapWidth (#3840) #7940

fix misplaced LineOffset and LineGapWidth (#3840)

fix misplaced LineOffset and LineGapWidth (#3840) #7940

Workflow file for this run

name: linux-ci
on:
workflow_dispatch:
push:
branches:
- main
- linux-*.*.x
tags:
- linux-*
pull_request:
branches:
- '*'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
# INFO: We are cancelling the concurrency group if the change is on PR. For workflow dispatch, this will not work.
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}
permissions:
id-token: write # needed for AWS
actions: read # needed for CodeQL
contents: read # needed for CodeQL
security-events: write # needed for CodeQL
env:
EGL_PLATFORM: surfaceless
jobs:
pre_job:
runs-on: ubuntu-22.04
outputs:
should_skip: ${{ github.event_name != 'workflow_dispatch' && steps.changed-files.outputs.linux_any_modified != 'true' }}
steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v4
with:
submodules: recursive
persist-credentials: false
- name: Get all Linux files that have changed
if: github.event_name != 'workflow_dispatch'
id: changed-files
uses: tj-actions/changed-files@24d32ffd492484c1d75e0c0b894501ddb9d30d62 # v47.0.0
with:
files_yaml_from_source_file: .github/changed-files.yml
- name: List changed files
if: steps.changed-files.outputs.linux_any_modified == 'true'
run: |
echo "Changed file(s): ${{ steps.changed-files.outputs.linux_all_changed_files }}"
linux-build-and-test:
if: needs.pre_job.outputs.should_skip != 'true'
needs: pre_job
strategy:
fail-fast: true
matrix:
variant:
- renderer: vulkan
rust: false
- renderer: opengl
rust: false
- renderer: opengl
rust: true
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v4
with:
submodules: recursive
persist-credentials: false
- name: Initialize CodeQL
uses: github/codeql-action/init@192325c86100d080feab897ff886c34abd4c83a3 # v3.30.3
with:
languages: cpp
- name: Install dependencies
run: .github/scripts/install-linux-deps
- run: cargo install armerge@2.2.0
# TODO: use below once
# https://github.com/tux3/armerge/issues/14
# is fixed
# - uses: taiki-e/install-action@020705266844b275b711684191e11281be48860c # v2
# with:
# tool: armerge@2
- if: matrix.variant.rust
run: cargo install cxxbridge-cmd --version 1.0.157 --locked
- uses: ./.github/actions/install-sccache
- name: Install ctcache
run: |
# pending open PR https://github.com/matus-chochlik/ctcache/pull/94
git clone https://github.com/louwers/ctcache.git
cd ctcache
cd ..
mv ctcache /usr/local/bin
- name: Configure AWS Credentials
if: vars.OIDC_AWS_ROLE_TO_ASSUME
uses: aws-actions/configure-aws-credentials@a03048d87541d1d9fcf2ecf528a4a65ba9bd7838 # v4
with:
aws-region: us-west-2
role-to-assume: ${{ vars.OIDC_AWS_ROLE_TO_ASSUME }}
role-session-name: ${{ github.run_id }}
- name: Build MapLibre Native
env:
CI: 1
run: |
cmake --version
# sccache configuration
export SCCACHE_BUCKET=maplibre-native-sccache
export SCCACHE_REGION=eu-central-1
if [ -z "${AWS_SECRET_ACCESS_KEY}" ]; then
echo "AWS_SECRET_ACCESS_KEY not set; not uploading sccache cache to S3"
export SCCACHE_S3_NO_CREDENTIALS=1
fi
# ctcache configuration
export CTCACHE_HOST=34.229.50.221
export CTCACHE_PORT=5000
export CTCACHE_PROTO=http
if [ -n "${{ secrets.CTCACHE_AUTH_KEY }}" ]; then
echo "setting CTCACHE_AUTH_KEY"
export CTCACHE_AUTH_KEY=${{ secrets.CTCACHE_AUTH_KEY }}
else
# do not write to cache if CTCACHE_AUTH_KEY not set
export CTCACHE_HOST_READ_ONLY=1
fi
cmake --preset linux-${{ matrix.variant.renderer }} \
-DMLN_WITH_CLANG_TIDY=ON \
-DCLANG_TIDY_COMMAND=/usr/local/bin/ctcache/clang-tidy \
-DCMAKE_C_COMPILER_LAUNCHER=sccache \
-DCMAKE_CXX_COMPILER_LAUNCHER=sccache \
-DMLN_WITH_COVERAGE=ON
cmake --build build-linux-${{ matrix.variant.renderer }} --target mbgl-core mbgl-test-runner mbgl-render-test-runner mbgl-expression-test mbgl-render mbgl-benchmark-runner
# mbgl-render (used for size test) & mbgl-benchmark-runner
- name: Show sccache stats
run: sccache --show-stats
- name: Upload mbgl-render as artifact
if: matrix.variant.renderer == 'opengl' && !matrix.variant.rust && github.event_name == 'pull_request'
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: mbgl-render
path: |
build-linux-${{ matrix.variant.renderer }}/bin/mbgl-render
- name: Upload mbgl-benchmark-runner as artifact
if: matrix.variant.renderer == 'opengl' && !matrix.variant.rust && github.event_name == 'pull_request'
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: mbgl-benchmark-runner
path: |
build-linux-${{ matrix.variant.renderer }}/mbgl-benchmark-runner
- name: Upload mbgl-render & mbgl-benchmark-runner to S3
if: matrix.variant.renderer == 'opengl' && !matrix.variant.rust && github.ref == 'refs/heads/main' && vars.OIDC_AWS_ROLE_TO_ASSUME
run: |
aws s3 cp build-linux-${{ matrix.variant.renderer }}/bin/mbgl-render s3://maplibre-native/mbgl-render-main
aws s3 cp build-linux-${{ matrix.variant.renderer }}/mbgl-benchmark-runner s3://maplibre-native/mbgl-benchmark-runner-main
# CodeQL
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@192325c86100d080feab897ff886c34abd4c83a3 # v3.30.3
with:
category: "/language:cpp"
# unit tests
- run: chmod +x build-linux-${{ matrix.variant.renderer }}/mbgl-test-runner
- name: Run C++ tests
continue-on-error: ${{ matrix.variant.renderer == 'vulkan' }}
run: xvfb-run -a build-linux-${{ matrix.variant.renderer }}/mbgl-test-runner
# render tests
- run: chmod +x build-linux-${{ matrix.variant.renderer }}/mbgl-render-test-runner
- name: Run render test
id: render_test
run: |
renderer="${{ matrix.variant.renderer }}"
if [[ "$renderer" == *-rust ]]; then
renderer=${renderer%-rust}
fi
xvfb-run -a build-linux-${{ matrix.variant.renderer }}/mbgl-render-test-runner --manifestPath=metrics/linux-"$renderer".json
- name: Upload render test result
if: always() && steps.render_test.outcome == 'failure'
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: render-test-result-${{ matrix.variant.renderer }}
path: |
metrics/linux-${{ matrix.variant.renderer }}.html
# expression tests
- run: chmod +x build-linux-${{ matrix.variant.renderer }}/expression-test/mbgl-expression-test
- name: Run expression test
run: build-linux-${{ matrix.variant.renderer }}/expression-test/mbgl-expression-test
linux-coverage:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v4
with:
submodules: recursive
persist-credentials: false
- name: Install dependencies
run: .github/scripts/install-linux-deps
- name: Cache Bazel
uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4
with:
key: ${{ runner.os }}-bazel-${{ hashFiles('.bazelversion', '.bazelrc', 'WORKSPACE', 'WORKSPACE.bazel', 'MODULE.bazel') }}
restore-keys: |
${{ runner.os }}-bazel-
path: ~/.cache/bazel
- uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v4
with:
node-version-file: '.nvmrc'
- name: Start server
run: |
npm install
node test/storage/server.js &
- name: Generate coverage report
run: |
xvfb-run -a \
bazel coverage --combined_report=lcov --instrumentation_filter="//:mbgl-core" \
--test_output=errors --local_test_jobs=1 \
--repo_env=GCOV="$PWD/.github/scripts/gcov_wrapper" \
--test_env=DISPLAY --test_env=XAUTHORITY --copt="-DCI_BUILD" \
//test:core //render-test:render-test //expression-test:test
echo coverage_report="$(bazel info output_path)"/_coverage/_coverage_report.dat >> "$GITHUB_ENV"
- name: Upload coverage report
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: coverage-report
path: ${{ env.coverage_report }}
linux-ci-result:
name: Linux CI Result
if: needs.pre_job.outputs.should_skip != 'true' && always()
runs-on: ubuntu-22.04
needs:
- pre_job
- linux-build-and-test
- linux-coverage
steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v4
- if: github.event_name == 'pull_request'
uses: ./.github/actions/save-pr-number
- name: Mark result as failed
if: needs.linux-build-and-test.result != 'success' || needs.linux-coverage.result != 'success'
run: exit 1