kopia lustrzana https://github.com/onthegomap/planetiler
				
				
				
			Add `quickstart.sh` script to run with recommended settings (#318)
							rodzic
							
								
									4cc139a603
								
							
						
					
					
						commit
						9e0eec93c8
					
				| 
						 | 
				
			
			@ -127,3 +127,28 @@ jobs:
 | 
			
		|||
        run: ./scripts/test-release.sh CI_ONLY
 | 
			
		||||
        env:
 | 
			
		||||
          SKIP_EXAMPLE_PROJECT: true
 | 
			
		||||
 | 
			
		||||
  quickstart:
 | 
			
		||||
    name: Quickstart script
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    timeout-minutes: 15
 | 
			
		||||
    steps:
 | 
			
		||||
      - uses: actions/checkout@v3
 | 
			
		||||
        with:
 | 
			
		||||
          submodules: true
 | 
			
		||||
      - name: Cache data/sources
 | 
			
		||||
        uses: ./.github/cache-sources-action
 | 
			
		||||
      - name: Set up JDK
 | 
			
		||||
        uses: actions/setup-java@v3
 | 
			
		||||
        with:
 | 
			
		||||
          java-version: 17
 | 
			
		||||
          distribution: 'temurin'
 | 
			
		||||
          cache: 'maven'
 | 
			
		||||
 | 
			
		||||
      - name: quickstart.sh --build
 | 
			
		||||
        run: rm -rf data/output.mbtiles data/tmp && ./quickstart.sh monaco --build && ./scripts/check-monaco.sh data/output.mbtiles
 | 
			
		||||
      - name: quickstart.sh --jar
 | 
			
		||||
        run: rm -rf data/output.mbtiles data/tmp && ./quickstart.sh monaco --jar && ./scripts/check-monaco.sh data/output.mbtiles
 | 
			
		||||
      # run docker last since it creates temp dirs with root user
 | 
			
		||||
      - name: quickstart.sh --docker
 | 
			
		||||
        run: rm -rf data/output.mbtiles data/tmp && ./quickstart.sh monaco --docker && ./scripts/check-monaco.sh data/output.mbtiles
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -55,7 +55,7 @@ public class Arguments {
 | 
			
		|||
  /**
 | 
			
		||||
   * Returns arguments parsed from command-line arguments.
 | 
			
		||||
   * <p>
 | 
			
		||||
   * For example to set {@code key=value}: {@code java -jar ... key=value}
 | 
			
		||||
   * For example to set {@code key=value}: {@code java -jar ... key=value} or {@code java -jar ... --key value}
 | 
			
		||||
   * <p>
 | 
			
		||||
   * Or to set {@code key=true}: {@code java -jar ... --key}
 | 
			
		||||
   *
 | 
			
		||||
| 
						 | 
				
			
			@ -64,14 +64,23 @@ public class Arguments {
 | 
			
		|||
   */
 | 
			
		||||
  public static Arguments fromArgs(String... args) {
 | 
			
		||||
    Map<String, String> parsed = new HashMap<>();
 | 
			
		||||
    for (String arg : args) {
 | 
			
		||||
    for (int i = 0; i < args.length; i++) {
 | 
			
		||||
      String arg = args[i].strip();
 | 
			
		||||
      String[] kv = arg.split("=", 2);
 | 
			
		||||
      String key = kv[0].replaceAll("^[\\s-]+", "");
 | 
			
		||||
      if (kv.length == 2) {
 | 
			
		||||
        String key = kv[0].replaceAll("^[\\s-]+", "");
 | 
			
		||||
        String value = kv[1];
 | 
			
		||||
        parsed.put(key, value);
 | 
			
		||||
      } else if (kv.length == 1) {
 | 
			
		||||
        parsed.put(kv[0].replaceAll("^[\\s-]+", ""), "true");
 | 
			
		||||
        if (arg.startsWith("-")) {
 | 
			
		||||
          if (i >= args.length - 1 || args[i + 1].strip().startsWith("-")) {
 | 
			
		||||
            parsed.put(key, "true");
 | 
			
		||||
          } else {
 | 
			
		||||
            parsed.put(key, args[++i].strip());
 | 
			
		||||
          }
 | 
			
		||||
        } else {
 | 
			
		||||
          parsed.put(key, "true");
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    return of(parsed);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -169,4 +169,16 @@ class ArgumentsTest {
 | 
			
		|||
      "--force_download=true"
 | 
			
		||||
    ).getBoolean("force_download", "force", false));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @Test
 | 
			
		||||
  void testSpaceBetweenArgs() {
 | 
			
		||||
    Arguments args = Arguments.fromArgs(
 | 
			
		||||
      "--key value --key2 value2 --force1 --force2".split("\\s+")
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    assertEquals("value", args.getString("key", "key", null));
 | 
			
		||||
    assertEquals("value2", args.getString("key2", "key2", null));
 | 
			
		||||
    assertTrue(args.getBoolean("force1", "force1", false));
 | 
			
		||||
    assertTrue(args.getBoolean("force2", "force2", false));
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,16 +0,0 @@
 | 
			
		|||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
set -e
 | 
			
		||||
 | 
			
		||||
AREA="${1:-monaco}"
 | 
			
		||||
shift || echo ""
 | 
			
		||||
 | 
			
		||||
echo "Will build planetiler, download sources for ${AREA}, and make a map."
 | 
			
		||||
echo "This requires at least 1GB of disk space. Press Ctrl+C to exit..."
 | 
			
		||||
sleep 5
 | 
			
		||||
 | 
			
		||||
echo "Building..."
 | 
			
		||||
./mvnw -DskipTests=true --projects planetiler-dist -am package
 | 
			
		||||
 | 
			
		||||
echo "Running..."
 | 
			
		||||
java -jar planetiler-dist/target/*with-deps.jar --force --download --area="${AREA}" $*
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,129 @@
 | 
			
		|||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Usage: quickstart.sh {--docker,--jar,--source} {--area=planet,monaco,massachusetts,etc.} [--memory=5g] other args...
 | 
			
		||||
 | 
			
		||||
set -o errexit
 | 
			
		||||
set -o pipefail
 | 
			
		||||
set -o nounset
 | 
			
		||||
 | 
			
		||||
JAVA="${JAVA:-java}"
 | 
			
		||||
METHOD="build"
 | 
			
		||||
AREA="monaco"
 | 
			
		||||
STORAGE="mmap"
 | 
			
		||||
PLANETILER_ARGS=("--download" "--force")
 | 
			
		||||
MEMORY=""
 | 
			
		||||
DRY_RUN=""
 | 
			
		||||
VERSION="latest"
 | 
			
		||||
DOCKER_DIR="$(pwd)/data"
 | 
			
		||||
 | 
			
		||||
# Handle quickstart.sh planet or quickstart.sh monaco
 | 
			
		||||
case $1 in
 | 
			
		||||
  -*) ;;
 | 
			
		||||
  *) AREA="$1"; shift ;;
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
# Parse args into env vars
 | 
			
		||||
while [[ $# -gt 0 ]]; do
 | 
			
		||||
  case $1 in
 | 
			
		||||
    --docker) METHOD="docker" ;;
 | 
			
		||||
    --dockerdir=*) DOCKER_DIR="${1#*=}" ;;
 | 
			
		||||
    --dockerdir) DOCKER_DIR="$2"; shift ;;
 | 
			
		||||
    --jar) METHOD="jar" ;;
 | 
			
		||||
    --build|--source) METHOD="build" ;;
 | 
			
		||||
    --version=*) VERSION="${1#*=}" ;;
 | 
			
		||||
    --version) VERSION="$2"; shift ;;
 | 
			
		||||
 | 
			
		||||
    --area=*) AREA="${1#*=}" ;;
 | 
			
		||||
    --area) AREA="$2"; shift ;;
 | 
			
		||||
    --planet) AREA="planet" ;;
 | 
			
		||||
 | 
			
		||||
    --memory=*) MEMORY="${MEMORY:-"-Xmx${1#*=}"}" ;;
 | 
			
		||||
    --memory) MEMORY="${MEMORY:-"-Xmx$2"}"; shift ;;
 | 
			
		||||
    --ram) STORAGE="ram" ;;
 | 
			
		||||
 | 
			
		||||
    --dry-run) DRY_RUN="true" ;;
 | 
			
		||||
 | 
			
		||||
    *) PLANETILER_ARGS+=("$1") ;;
 | 
			
		||||
  esac
 | 
			
		||||
  shift
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
PLANETILER_ARGS+=("--area=$AREA")
 | 
			
		||||
PLANETILER_ARGS+=("--storage=$STORAGE")
 | 
			
		||||
 | 
			
		||||
# Configure memory settings based on the area being built
 | 
			
		||||
case $AREA in
 | 
			
		||||
  planet)
 | 
			
		||||
    PLANETILER_ARGS+=("--nodemap-type=array" "--download-threads=20" "--download-chunk-size-mb=500")
 | 
			
		||||
    case "$STORAGE" in
 | 
			
		||||
      ram) MEMORY="${MEMORY:-"-Xmx150g"}" ;;
 | 
			
		||||
      mmap) MEMORY="${MEMORY:-"-Xmx30g -Xmn15g"}" ;;
 | 
			
		||||
    esac
 | 
			
		||||
    ;;
 | 
			
		||||
  monaco)
 | 
			
		||||
    # Use mini extracts for monaco
 | 
			
		||||
    PLANETILER_ARGS+=("--water-polygons-url=https://github.com/onthegomap/planetiler/raw/main/planetiler-core/src/test/resources/water-polygons-split-3857.zip")
 | 
			
		||||
    PLANETILER_ARGS+=("--water-polygons-path=data/sources/monaco-water.zip")
 | 
			
		||||
    PLANETILER_ARGS+=("--natural-earth-url=https://github.com/onthegomap/planetiler/raw/main/planetiler-core/src/test/resources/natural_earth_vector.sqlite.zip")
 | 
			
		||||
    PLANETILER_ARGS+=("--natural-earth-path=data/sources/monaco-natural_earth_vector.sqlite.zip")
 | 
			
		||||
    ;;
 | 
			
		||||
esac
 | 
			
		||||
# For extracts, use default nodemap type (sortedtable) and -Xmx (25% of RAM up to 25GB) and hope for the best.
 | 
			
		||||
# You can set --memory=5g if you want to change it.
 | 
			
		||||
 | 
			
		||||
JVM_ARGS="-XX:+UseParallelGC $MEMORY"
 | 
			
		||||
 | 
			
		||||
echo "Running planetiler with:"
 | 
			
		||||
echo "  METHOD=\"$METHOD\" (change with --docker --jar or --build)"
 | 
			
		||||
echo "  JVM_ARGS=\"${JVM_ARGS}\" (change with --memory=Xg)"
 | 
			
		||||
echo "  PLANETILER_ARGS=\"${PLANETILER_ARGS[*]}\""
 | 
			
		||||
echo "  DRY_RUN=\"${DRY_RUN:-false}\""
 | 
			
		||||
echo ""
 | 
			
		||||
 | 
			
		||||
if [ "$DRY_RUN" == "true" ]
 | 
			
		||||
then
 | 
			
		||||
  echo "Without --dry-run, will run commands:"
 | 
			
		||||
else
 | 
			
		||||
  sleep 3
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
function run() {
 | 
			
		||||
  echo "$ $*"
 | 
			
		||||
  if [ "$DRY_RUN" != "true" ]
 | 
			
		||||
  then
 | 
			
		||||
    eval "$*"
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function check_java_version() {
 | 
			
		||||
  if [ "$DRY_RUN" != "true" ]
 | 
			
		||||
  then
 | 
			
		||||
    if [ -z "$(which java)" ]; then
 | 
			
		||||
      echo "java not found on path"
 | 
			
		||||
      exit 1
 | 
			
		||||
    else
 | 
			
		||||
      OUTPUT="$($JAVA -jar "$1" --help 2>&1 || echo OK)"
 | 
			
		||||
      if [[ "$OUTPUT" =~ "UnsupportedClassVersionError" ]]; then
 | 
			
		||||
        echo "Wrong version of java installed, need at least 16 but found:"
 | 
			
		||||
        $JAVA --version
 | 
			
		||||
        exit 1
 | 
			
		||||
      fi
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Run planetiler using docker, jar file, or build from source
 | 
			
		||||
case $METHOD in
 | 
			
		||||
  docker)
 | 
			
		||||
    run docker run -e JAVA_TOOL_OPTIONS=\'"${JVM_ARGS}"\' -v "$DOCKER_DIR":/data "ghcr.io/onthegomap/planetiler:${VERSION}" "${PLANETILER_ARGS[@]}"
 | 
			
		||||
    ;;
 | 
			
		||||
  jar)
 | 
			
		||||
    run wget -nc "https://github.com/onthegomap/planetiler/releases/${VERSION}/download/planetiler.jar"
 | 
			
		||||
    check_java_version planetiler.jar
 | 
			
		||||
    run "$JAVA" "${JVM_ARGS}" -jar planetiler.jar "${PLANETILER_ARGS[@]}"
 | 
			
		||||
    ;;
 | 
			
		||||
  build)
 | 
			
		||||
    run ./mvnw -DskipTests --projects planetiler-dist -am clean package
 | 
			
		||||
    run "$JAVA" "${JVM_ARGS}" -jar planetiler-dist/target/*with-deps.jar "${PLANETILER_ARGS[@]}"
 | 
			
		||||
    ;;
 | 
			
		||||
esac
 | 
			
		||||
		Ładowanie…
	
		Reference in New Issue