diff --git a/.github/workflows/omt_ci.yml b/.github/workflows/omt_ci.yml deleted file mode 100644 index 8728bf0..0000000 --- a/.github/workflows/omt_ci.yml +++ /dev/null @@ -1,45 +0,0 @@ -# MapTiler OpenMapTiles -####################### - -# Workflow to validate OMT`s new Pull Requests and commits pushed into OMT repo - -name: OMT_CI - -# Controls when the action will run. Triggers the workflow on push and pull request -# events but only for the master branch -on: - push: - branches: [ master ] - pull_request: - branches: [ master ] - -# jobs can run parallel -jobs: - # This workflow contains a single job called "build" - build: - # runs on ubuntu (can run on windows and mac os) - runs-on: ubuntu-latest - - # Steps represent a sequence of tasks that will be executed as part of the job - steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v2 - - # Named steps - - name: generate all zooms - run: sed -i 's/QUICKSTART_MAX_ZOOM=7/QUICKSTART_MAX_ZOOM=14/g' .env - - # Runs quickstart - - name: quickstart - env: - area: northamptonshire - run: bash ./quickstart.sh $area - - - name: generate devdoc - run: TEST_MODE=yes make generate-devdoc - - # todo: use artifact to store result of tests - #- uses: actions/upload-artifact@v1 - # with: - # name: quickstart log file - # path: quickstart.log diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml new file mode 100644 index 0000000..886ec47 --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,200 @@ +# 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 + ./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 }} + ``` + +
+ expand for details... + + ``` + ${{ steps.main.outputs.details }} + ``` + +
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}