diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 44f7e4fa..3dd8599a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -3,54 +3,67 @@ name: "Continuous Integration" on: push: pull_request: - branches: [ master ] + branches: [master] env: AREA: liechtenstein jobs: - - Windows-Build: + linter: + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest] + steps: + - name: Check out repository ✨ + uses: actions/checkout@v3 + - name: Run hadolint 🐳 + uses: hadolint/hadolint-action@v2.1.0 + with: + dockerfile: Dockerfile + windows-build: name: Windows build runs-on: windows-latest - + needs: linter steps: - - uses: actions/checkout@v2 - - - name: Enable vcpkg cache - uses: actions/cache@v2 - with: - path: c:\vcpkg\installed - key: windows-vcpkg-x64-0 # Increase the number whenever dependencies are modified - restore-keys: windows-vcpkg-x64 - - - name: Build dependencies - run: | - vcpkg install --triplet=x64-windows-static-md lua shapelib zlib protobuf[zlib] sqlite3 boost-program-options boost-filesystem boost-geometry boost-system boost-asio boost-interprocess boost-iostreams boost-sort rapidjson - - - name: Build tilemaker - run: | - mkdir ${{ github.workspace }}\build - cd ${{ github.workspace }}\build && cmake -DTILEMAKER_BUILD_STATIC=ON -DVCPKG_TARGET_TRIPLET="x64-windows-static-md" -DCMAKE_TOOLCHAIN_FILE="c:\vcpkg\scripts\buildsystems\vcpkg.cmake" .. - cd ${{ github.workspace }}\build && cmake --build . --config RelWithDebInfo - - - name: Build openmaptiles-compatible mbtiles files of Liechtenstein - run: | - Invoke-WebRequest -Uri http://download.geofabrik.de/europe/${{ env.AREA }}-latest.osm.pbf -OutFile ${{ env.AREA }}.osm.pbf - ${{ github.workspace }}\build\RelWithDebInfo\tilemaker.exe ${{ env.AREA }}.osm.pbf --config=resources/config-openmaptiles.json --process=resources/process-openmaptiles.lua --output=${{ env.AREA }}.mbtiles --store osm_store --verbose || true - - - name: 'Upload compiled executable' - uses: actions/upload-artifact@v2 - with: - name: tilemaker-windows - path: | - ${{ github.workspace }}\resources - ${{ github.workspace }}\build\RelWithDebInfo\tilemaker.exe - ${{ github.workspace }}\build\RelWithDebInfo\*.pdb - - unix-build: - strategy: - matrix: + - uses: actions/checkout@v2 + + - name: Enable vcpkg cache + uses: actions/cache@v2 + with: + path: c:\vcpkg\installed + key: windows-vcpkg-x64-0 # Increase the number whenever dependencies are modified + restore-keys: windows-vcpkg-x64 + + - name: Build dependencies + run: | + vcpkg install --triplet=x64-windows-static-md lua shapelib zlib protobuf[zlib] sqlite3 boost-program-options boost-filesystem boost-geometry boost-system boost-asio boost-interprocess boost-iostreams boost-sort rapidjson + + - name: Build tilemaker + run: | + mkdir ${{ github.workspace }}\build + cd ${{ github.workspace }}\build && cmake -DTILEMAKER_BUILD_STATIC=ON -DVCPKG_TARGET_TRIPLET="x64-windows-static-md" -DCMAKE_TOOLCHAIN_FILE="c:\vcpkg\scripts\buildsystems\vcpkg.cmake" .. + cd ${{ github.workspace }}\build && cmake --build . --config RelWithDebInfo + + - name: Build openmaptiles-compatible mbtiles files of Liechtenstein + run: | + Invoke-WebRequest -Uri http://download.geofabrik.de/europe/${{ env.AREA }}-latest.osm.pbf -OutFile ${{ env.AREA }}.osm.pbf + ${{ github.workspace }}\build\RelWithDebInfo\tilemaker.exe ${{ env.AREA }}.osm.pbf --config=resources/config-openmaptiles.json --process=resources/process-openmaptiles.lua --output=${{ env.AREA }}.mbtiles --store osm_store --verbose || true + + - name: "Upload compiled executable" + uses: actions/upload-artifact@v2 + with: + name: tilemaker-windows + path: | + ${{ github.workspace }}\resources + ${{ github.workspace }}\build\RelWithDebInfo\tilemaker.exe + ${{ github.workspace }}\build\RelWithDebInfo\*.pdb + + unix-build: + needs: linter + strategy: + matrix: include: - os: ubuntu-18.04 triplet: x64-linux @@ -67,53 +80,55 @@ jobs: runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v2 - - - name: Enable vcpkg cache - uses: actions/cache@v2 - with: - path: ${{ matrix.path }} - key: vcpkg-${{ matrix.triplet }}-0 # Increase the number whenever dependencies are modified - restore-keys: vcpkg-${{ matrix.triplet }} - - - name: Build dependencies - run: | - vcpkg install --triplet=${{ matrix.triplet }} lua shapelib zlib protobuf[zlib] sqlite3 boost-program-options boost-filesystem boost-geometry boost-system boost-asio boost-interprocess boost-iostreams boost-sort rapidjson - - - name: Build tilemaker - run: | - mkdir build - cd build - cmake -DTILEMAKER_BUILD_STATIC=ON -DCMAKE_BUILD_TYPE=Release -DVCPKG_TARGET_TRIPLET=${{ matrix.triplet }} -DCMAKE_TOOLCHAIN_FILE=${{ matrix.toolchain }} -DCMAKE_CXX_COMPILER=g++ .. - cmake --build . - strip tilemaker - - - name: Build openmaptiles-compatible mbtiles files of Liechtenstein - run: | - curl http://download.geofabrik.de/europe/${{ env.AREA }}-latest.osm.pbf -o ${{ env.AREA }}.osm.pbf - ${{ github.workspace }}/build/${{ matrix.executable }} ${{ env.AREA }}.osm.pbf --config=resources/config-openmaptiles.json --process=resources/process-openmaptiles.lua --output=${{ env.AREA }}.mbtiles --verbose || true - - - name: 'Upload compiled executable' - uses: actions/upload-artifact@v2 - with: - name: tilemaker-${{ matrix.os }} - path: | - ${{ github.workspace }}/resources - ${{ github.workspace }}/build/${{ matrix.executable }} - - Github-Action: + - uses: actions/checkout@v2 + + - name: Enable vcpkg cache + uses: actions/cache@v2 + with: + path: ${{ matrix.path }} + key: vcpkg-${{ matrix.triplet }}-0 # Increase the number whenever dependencies are modified + restore-keys: vcpkg-${{ matrix.triplet }} + + - name: Build dependencies + run: | + vcpkg install --triplet=${{ matrix.triplet }} lua shapelib zlib protobuf[zlib] sqlite3 boost-program-options boost-filesystem boost-geometry boost-system boost-asio boost-interprocess boost-iostreams boost-sort rapidjson + + - name: Build tilemaker + run: | + mkdir build + cd build + cmake -DTILEMAKER_BUILD_STATIC=ON -DCMAKE_BUILD_TYPE=Release -DVCPKG_TARGET_TRIPLET=${{ matrix.triplet }} -DCMAKE_TOOLCHAIN_FILE=${{ matrix.toolchain }} -DCMAKE_CXX_COMPILER=g++ .. + cmake --build . + strip tilemaker + + - name: Build openmaptiles-compatible mbtiles files of Liechtenstein + run: | + curl http://download.geofabrik.de/europe/${{ env.AREA }}-latest.osm.pbf -o ${{ env.AREA }}.osm.pbf + ${{ github.workspace }}/build/${{ matrix.executable }} ${{ env.AREA }}.osm.pbf --config=resources/config-openmaptiles.json --process=resources/process-openmaptiles.lua --output=${{ env.AREA }}.mbtiles --verbose || true + + - name: "Upload compiled executable" + uses: actions/upload-artifact@v2 + with: + name: tilemaker-${{ matrix.os }} + path: | + ${{ github.workspace }}/resources + ${{ github.workspace }}/build/${{ matrix.executable }} + + github-action: name: Generate mbtiles with Github Action + needs: linter runs-on: ubuntu-latest steps: - - name: Check out repository - uses: actions/checkout@v2 + - name: Check out repository + uses: actions/checkout@v2 + + - name: Download PBF file + run: curl http://download.geofabrik.de/europe/${AREA}-latest.osm.pbf -o ${AREA}.osm.pbf - - name: Download PBF file - run: curl http://download.geofabrik.de/europe/${AREA}-latest.osm.pbf -o ${AREA}.osm.pbf + - name: Build openmaptiles-compatible mbtiles files of given area + uses: ./ + with: + input: ${{ env.AREA }}.osm.pbf + output: ${{ env.AREA }}.mbtiles - - name: Build openmaptiles-compatible mbtiles files of given area - uses: ./ - with: - input: ${{ env.AREA }}.osm.pbf - output: ${{ env.AREA }}.mbtiles diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 00000000..4bfcfa20 --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,51 @@ +name: "Build, Publish & Release" + +on: + workflow_run: + workflows: ["Continuous Integration"] + types: [completed] + branches: + - master + tags: + - "v*" +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository }} + +jobs: + build-and-push-image: + runs-on: ubuntu-latest + if: ${{ github.event.workflow_run.conclusion == 'success' }} + permissions: + contents: read + packages: write + steps: + - name: Check out repository 🎉 + uses: actions/checkout@v3 + with: + ref: ${{ github.event.pull_request.head.sha }} + - name: Set up QEMU 🚨 + uses: docker/setup-qemu-action@v2 + - name: Set up Docker Buildx 🏗 + uses: docker/setup-buildx-action@v2 + with: + buildkitd-flags: --debug + - name: Log in to the Container registry 🔐 + uses: docker/login-action@v2 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Extract metadata (tags, labels) for Docker 🙏🏽 + id: meta + uses: docker/metadata-action@v4 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + - name: Build and push Docker image 🎉 + uses: docker/build-push-action@v3.0.0 + with: + context: . + file: Dockerfile + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }}