Skip to content
Snippets Groups Projects
build-for-test 1.35 KiB
Newer Older
  • Learn to ignore specific revisions
  • Tom Robinson's avatar
    Tom Robinson committed
    #!/usr/bin/env bash
    
    set -eu
    
    VERSION_PROPERTY_NAME="src_hash"
    
    source-hash() {
      # hash all the files that might change a backend-only uberjar build (for integration tests)
      (
    
        find src deps.edn resources/sample-database.db.mv.db -type f -print0 | xargs -0 shasum ;
    
        find resources -type f \( -iname \*.clj -o -iname \*.edn -o -iname \*.yaml -o -iname \*.properties -o -iname \*.html \) -not -name "version.properties" -print0 | xargs -0 shasum ;
    
    Tom Robinson's avatar
    Tom Robinson committed
      ) | shasum | awk '{ print $1 }'
    }
    
    uberjar-hash() {
    
    Cam Saul's avatar
    Cam Saul committed
      # java --add-opens java.base/java.nio=ALL-UNNAMED -jar target/uberjar/metabase.jar version | grep -oE 'source_hash [a-f0-9]+' | awk '{ print $2 }'
    
    Tom Robinson's avatar
    Tom Robinson committed
      # pulling the version.properties directly from the jar is much faster
      unzip -c target/uberjar/metabase.jar version.properties | grep "$VERSION_PROPERTY_NAME" | cut -f2 -d=
    }
    
    check-uberjar-hash() {
      expected_hash=$(source-hash)
      actual_hash=$(uberjar-hash)
      if [ "$expected_hash" == "$actual_hash" ]; then
        return 0
      else
        return 1
      fi
    }
    
    build-uberjar-for-test() {
    
      ./bin/build.sh :steps [:version]
    
      echo -e "\n$VERSION_PROPERTY_NAME=$(source-hash)" >> resources/version.properties
    
      ./bin/build.sh :steps [:uberjar]
    
    Tom Robinson's avatar
    Tom Robinson committed
    }
    
    if [ ! -f "target/uberjar/metabase.jar" ] || ! check-uberjar-hash; then
      echo "Building uberjar for testing"
      build-uberjar-for-test
    else
      echo "Uberjar already up to date for testing"
    fi