kopia lustrzana https://github.com/openmaptiles/openmaptiles
202 wiersze
7.1 KiB
YAML
202 wiersze
7.1 KiB
YAML
# Workflow to validate OMT`s new Pull Requests and commits pushed into OMT repo
|
|
|
|
name: OpenMapTiles CI
|
|
|
|
on:
|
|
push:
|
|
branches: [ master ]
|
|
pull_request:
|
|
|
|
jobs:
|
|
|
|
integrity_test:
|
|
name: Run integrity test
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
|
|
- name: Checkout the changes
|
|
uses: actions/checkout@v2
|
|
|
|
- name: Run quickstart for a small area
|
|
env:
|
|
area: monaco
|
|
run: |
|
|
# For now, change the quickstart values directly in the .env file
|
|
# TODO: We should probably use env vars instead
|
|
sed -i 's/QUICKSTART_MAX_ZOOM=7/QUICKSTART_MAX_ZOOM=14/g' .env
|
|
export QUIET=1
|
|
./quickstart.sh $area
|
|
|
|
- name: Save quickstart.log
|
|
uses: actions/upload-artifact@v1
|
|
with:
|
|
name: quickstart.log
|
|
path: quickstart.log
|
|
|
|
- name: Test etldoc images
|
|
run: |
|
|
export TEST_MODE=yes
|
|
make generate-devdoc
|
|
|
|
performance:
|
|
name: Evaluate performance
|
|
runs-on: ubuntu-latest
|
|
# Even though we technically don't need to wait for integrity test to finish,
|
|
# there is no point to run long perf test until we know the code is OK
|
|
needs: integrity_test
|
|
env:
|
|
# Smaller tests (runs everything in about 30 minutes)
|
|
TEST_PERF_PARAMS: "--minzoom 0 --maxzoom 14 --test equatorial-guinea --test liechtenstein"
|
|
TEST_DATA_URL: "https://drive.google.com/uc?export=download&id=12vw07f9W0MiAHIqMztRiIMwahJfqTi21"
|
|
|
|
## Large test data -- we should switch to it after everything is working ok
|
|
# TEST_PERF_PARAMS: "--minzoom 0 --maxzoom 14 --test hungary --test isle-of-man"
|
|
# TEST_DATA_URL: "https://drive.google.com/uc?export=download&id=1kw7XPDPd1Rc-Zi2XxGLTXdinUSq-S4pT"
|
|
steps:
|
|
- name: Cache test data download
|
|
id: cache-testdata
|
|
uses: actions/cache@v1
|
|
with:
|
|
path: ci_cache
|
|
key: "${{ env.TEST_DATA_URL }}"
|
|
|
|
- name: Download test data on cache miss
|
|
if: steps.cache-testdata.outputs.cache-hit != 'true'
|
|
run: |
|
|
echo "Data file does not exist, downloading $TEST_DATA_URL"
|
|
mkdir -p ci_cache
|
|
curl --silent --show-error --location --output ci_cache/perf-test-areas-latest.osm.pbf "$TEST_DATA_URL"
|
|
|
|
- name: Get code
|
|
uses: actions/checkout@v2
|
|
with:
|
|
# Fetch the last two commits in case this is a PR,
|
|
# and we need to profile the base branch first
|
|
fetch-depth: 2
|
|
path: code
|
|
|
|
- name: Compute git revision hash to cache
|
|
id: calc
|
|
run: |
|
|
# If this is a pull request, we should cache the parent (base) revision
|
|
# Otherwise cache the current one
|
|
cd code
|
|
REV_HASH=$(git log -1 --format="%H")
|
|
if [ "$GITHUB_EVENT_NAME" = "pull_request" ]; then
|
|
# Take the first parent of the grafted commit (cannot use HEAD^1 with shallow clones)
|
|
REV_HASH=$(git cat-file -p $REV_HASH | awk 'NR > 1 {if(/^parent/){print $2; exit}}')
|
|
fi
|
|
echo "::set-output name=hash::$REV_HASH"
|
|
|
|
- name: Set up caching for the performance results
|
|
uses: actions/cache@v1
|
|
with:
|
|
path: perf_cache
|
|
key: "${{ steps.calc.outputs.hash }}-${{ env.TEST_DATA_URL }}"
|
|
|
|
- name: Load test data into DB and run performance test
|
|
id: main
|
|
env:
|
|
CACHE_SHA: "${{ steps.calc.outputs.hash }}"
|
|
run: |
|
|
create_db() {
|
|
make clean
|
|
make init-dirs
|
|
cp ../ci_cache/perf-test-areas-latest.osm.pbf data/perf-test-areas-latest.osm.pbf
|
|
make db-destroy
|
|
make all
|
|
make db-start
|
|
time make import-data
|
|
time make import-osm
|
|
time make import-borders
|
|
time make import-wikidata
|
|
time make import-sql
|
|
}
|
|
|
|
mkdir -p perf_cache
|
|
mkdir -p artifacts
|
|
cd code
|
|
|
|
CURRENT_SHA=$(git log -1 --format="%H")
|
|
|
|
if [ ! -f ../perf_cache/results.json ]; then
|
|
echo "We do not have cached performance results, create them..."
|
|
if [ "$GITHUB_EVENT_NAME" = "pull_request" ]; then
|
|
git reset --hard ${CURRENT_SHA}^1
|
|
fi
|
|
|
|
create_db
|
|
|
|
# Use latest tools version because these specific tests do not yet exist in the 4.1 tools version
|
|
# Custom TOOLS_VERSION can be removed once OMT master is migrated to the next tools version
|
|
TOOLS_VERSION=latest docker-compose run --rm openmaptiles-tools \
|
|
test-perf openmaptiles.yaml $TEST_PERF_PARAMS \
|
|
--record /tileset/results.json
|
|
mv results.json ../perf_cache
|
|
|
|
if [ "$GITHUB_EVENT_NAME" = "pull_request" ]; then
|
|
# For pull requests, restore to the PR version before continuing
|
|
git reset --hard ${CURRENT_SHA}
|
|
fi
|
|
else
|
|
echo "Found cached performance results"
|
|
fi
|
|
|
|
if [ "$GITHUB_EVENT_NAME" = "pull_request" ]; then
|
|
cp ../perf_cache/results.json ../artifacts/base-results.json
|
|
else
|
|
cp ../perf_cache/results.json ../artifacts/results.json
|
|
fi
|
|
|
|
if [ "$GITHUB_EVENT_NAME" = "pull_request" ]; then
|
|
echo "Comparing pull request results with the base..."
|
|
|
|
create_db
|
|
|
|
# Use latest tools version because these specific tests do not yet exist in the 4.1 tools version
|
|
# Custom TOOLS_VERSION can be removed once OMT master is migrated to the next tools version
|
|
cp ../perf_cache/results.json .
|
|
OUTPUT="$(TOOLS_VERSION=latest docker-compose run --rm openmaptiles-tools \
|
|
test-perf openmaptiles.yaml $TEST_PERF_PARAMS \
|
|
--compare /tileset/results.json --record /tileset/pr-results.json)"
|
|
rm results.json
|
|
mv pr-results.json ../artifacts/
|
|
|
|
# Convert multiline output into a single long string.
|
|
# See https://github.community/t5/GitHub-Actions/set-output-Truncates-Multiline-Strings/td-p/37870
|
|
OUTPUT="${OUTPUT//'%'/'%25'}"
|
|
OUTPUT="${OUTPUT//$'\n'/'%0A'}"
|
|
OUTPUT="${OUTPUT//$'\r'/'%0D'}"
|
|
|
|
# Split into two parts -- before and after the ===== SUMMARY =====
|
|
echo "::set-output name=summary::${OUTPUT##*========}"
|
|
echo "::set-output name=details::${OUTPUT%%========*}"
|
|
fi
|
|
|
|
- name: Save artifacts
|
|
uses: actions/upload-artifact@v1
|
|
with:
|
|
name: performance_results
|
|
path: artifacts
|
|
|
|
- name: Post a comment on Pull Request
|
|
if: "github.event_name == 'pull_request'"
|
|
uses: marocchino/sticky-pull-request-comment@v1
|
|
timeout-minutes: 1
|
|
continue-on-error: true
|
|
with:
|
|
message: |-
|
|
```
|
|
${{ steps.main.outputs.summary }}
|
|
```
|
|
|
|
<details>
|
|
<summary>expand for details...</summary>
|
|
|
|
```
|
|
${{ steps.main.outputs.details }}
|
|
```
|
|
|
|
</details>
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|