# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4

PortSystem          1.0
PortGroup           java 1.0

name                metabase
version             0.60.2
revision            0
categories          databases java
maintainers         {gmail.com:slashapp @slashapp} openmaintainer

homepage            https://www.metabase.com
description         Metabase is an open-source business intelligence platform.\
                    You can use Metabase to ask questions about your data,\
                    or embed Metabase in your app to let your customers explore\
                    their data on their own.
long_description    ${description}

platforms           {darwin any}
supported_archs     noarch
license             MIT

# Metabase JAR files are hosted on their download server with ".x" suffix in version
master_sites        https://downloads.metabase.com/v${version}.x/
dist_subdir         ${name}/${version}
set metabase_jar    ${name}.jar
distfiles           ${metabase_jar}

checksums           rmd160  d6b89962ba85fa6e35dad26c23e3f69c60cc0128 \
                    sha256  db00f81fa532985a39519b49a83a84774c749fdc412d8b154a3ed0df5776a7b1 \
                    size    629807121

java.version        11+
java.fallback       openjdk11

use_configure       no
extract {}
build {}
test {}

set metabase_conf_dir    ${prefix}/etc/${name}
set metabase_conf        ${metabase_conf_dir}/${name}.conf
set metabase_conf_sample ${metabase_conf}.sample
set metabase_exec_dir    ${prefix}/libexec/${name}
set metabase_home_dir    ${prefix}/var/lib/${name}
set metabase_log_dir     ${prefix}/var/log/${name}
set metabase_run_dir     ${prefix}/var/run/${name}
set metabase_db_dir      ${prefix}/var/db/${name}
set metabase_exec        ${metabase_exec_dir}/${metabase_jar}
set metabase_log         ${metabase_log_dir}/${name}.log
set metabase_pid         ${metabase_run_dir}/${name}.pid
set metabase_host        127.0.0.1
set metabase_port        3000
set metabase_user        metabase
set metabase_group       metabase

set metabase_dir_list [list \
    ${metabase_exec_dir} \
    ${metabase_home_dir} \
    ${metabase_log_dir} \
    ${metabase_run_dir} \
    ${metabase_db_dir} \
]

set metabase_exec_list [list \
    ${distpath}/${metabase_jar}
]

foreach d ${metabase_dir_list} {
    destroot.keepdirs-append ${destroot}${d}
}

destroot {
    foreach d ${metabase_dir_list} {
        xinstall -d -m 0755 -g ${metabase_group} -o ${metabase_user} \
            ${destroot}${d}
    }

    foreach f ${metabase_exec_list} {
        xinstall -m 0644 -g ${metabase_group} -o ${metabase_user} \
            ${f} \
            ${destroot}${metabase_exec_dir}
    }

    xinstall -d -m 0755 ${destroot}${metabase_conf_dir}
    xinstall -m 0644 ${filespath}/${name}.conf.sample \
        ${destroot}${metabase_conf_sample}
}

post-activate {
    if {![file exists ${metabase_conf}]} {
        copy ${metabase_conf_sample} ${metabase_conf}
    }
}

post-deactivate {
    # Cleanup all metabase-created files, which are significant
    foreach d ${metabase_dir_list} {
        if {${d} eq ${metabase_db_dir}} {
            set files [glob -nocomplain -directory ${metabase_db_dir} *]
            if {[llength $files] > 1} {
                ui_msg "********************************************************"
                ui_msg "To revert the system after uninstalling the port,"
                ui_msg "delete metabase database files:"
                ui_msg "$ sudo rm -fr ${metabase_db_dir}"
                ui_msg "********************************************************"
                continue
            }
        }
        if { [file exists ${d}] } {
            ui_info "post-deactivate: dir exists, deleting: ${d}"
            delete -force ${d}
        } else {
            ui_info "post-deactivate: dir doesn't exist, skipping delete: ${d}"
        }
    }
}

add_users               ${metabase_user} \
                        group=${metabase_group} \
                        home=${metabase_home_dir} \
                        shell=/bin/sh \
                        realname=metabase

startupitem.create      yes

# Enable additional logging, for diagnostic purposes
startupitem.logevents   yes

startupitem.user        ${metabase_user}
startupitem.group       ${metabase_group}

# Note: To avoid breakage when a Java port is updated/removed, use 'java_home' to select at runtime
#       java_home version filter not support wildcards
set java_version [regsub {[^0-9.]} ${java.version} ""]
startupitem.init "
if test -r ${metabase_conf}; then
    . ${metabase_conf}
fi
: \${MB_PLUGINS_DIR:=${metabase_exec_dir}/plugins}
: \${MB_DB_FILE:=${metabase_db_dir}/${name}}
: \${MB_JETTY_HOST:=${metabase_host}}
: \${MB_JETTY_PORT:=${metabase_port}}
: \${MB_JAVA_OPTS:=}
export JAVA_HOME=\$(/usr/libexec/java_home --failfast --version ${java_version} 2>/dev/null || /usr/libexec/java_home)
export MB_PLUGINS_DIR
export MB_DB_FILE
export MB_JETTY_HOST
export MB_JETTY_PORT
"

startupitem.start \
    "\${JAVA_HOME}/bin/java \${MB_JAVA_OPTS} -jar ${metabase_exec}"

startupitem.stop \
    "kill \$(cat ${metabase_pid})"

startupitem.logfile \
    ${metabase_log}

startupitem.pidfile \
    manual ${metabase_pid}

notes-append "
To configure the metabase service, edit:
  - \$ sudo vi ${metabase_conf}
Supported settings include MB_JETTY_HOST, MB_JETTY_PORT, MB_DB_FILE, MB_PLUGINS_DIR,
MB_JAVA_OPTS, and any other Metabase environment variables.
On activation, if ${metabase_conf} does not exist, it will be created from:
  - ${metabase_conf_sample}
User changes to ${metabase_conf} are preserved across port upgrades. After upgrading,
compare ${metabase_conf} with ${metabase_conf_sample} for any new defaults.
Read document at https://www.metabase.com/docs/latest/configuring-metabase/environment-variables

Once the service is enabled, metabase will by default:
  - Listen by default on: http://${metabase_host}:${metabase_port}
  - Write logs to: ${metabase_log}
"

# Use GitHub releases for livecheck, filter out beta versions
# Open source version tags are like v0.57.7, enterprise is v1.x
livecheck.type      regex
livecheck.url       https://api.github.com/repos/metabase/metabase/releases?per_page=50
livecheck.regex     {"tag_name":\s*"v(0\.\d+\.\d+)"}
