atscaleinc/AtScale PS Template

Run any AtScale PS Template operation as a GitHub Actions composite step. Set the `operation` input to the operation name (e.g. extract-model-from-atscale).

View on GitHub

Trust Signals

Scorecard Score
not yet scored
Maintenance Recency
Activelast commit Jun 25, 2026
License
Apache 2.0

Pinned Snippet

workflow.ymlSHA-pinned
uses: atscaleinc/ps-utils@a4c97a9ba3e6b9873eb0ed29a3095410f85d799c # v2.0.0

tags can be moved; commit SHAs can't. why a SHA?

namedescriptionrequireddefault
operationName of the operation to run. One of: extract-model-from-atscale extract-model-from-sml generate-sml-from-connection generate-sml-from-ddl generate-namespace-from-model generate-metrics-from-model generate-tableau-from-namespace generate-excel-from-namespace generate-powerbi-from-namespace execute-sql-on-connection extract-ddl-from-connection generate-atscale-install-yaml atscale-list-data-sources atscale-create-data-source atscale-list-repos atscale-create-repo atscale-list-deployments atscale-deploy-catalog atscale-list-model-errors generate-ddl-from-atscale extract-data-shape-from-connection generate-ddl-from-data-shape generate-data-from-data-shape generate-data-from-data-shape-to-connection extract-queries-from-atscale execute-atscale-query-harness execute-query-on-connection generate-enhanced-query-results execute-run-analysis generate-queries-from-sml generate-queries-from-model extract-query-stats-from-atscale generate-sml-from-xml generate-shared-model-plan apply-shared-model-plan-option deploy-atscale-microk8s execute-web-services yes
connection-fileContents of the connections YAML file (store as a secret). Used by: extract-model-from-atscale, generate-sml-from-connection, generate-tableau-from-namespace, execute-sql-on-connection, extract-ddl-from-connection, extract-data-shape-from-connection, generate-data-from-data-shape-to-connection. no
connection-nameName of the connection within the connections file. Used by: extract-model-from-atscale, generate-sml-from-connection, generate-sml-from-ddl, generate-tableau-from-namespace, execute-sql-on-connection, extract-ddl-from-connection, extract-data-shape-from-connection, generate-data-from-data-shape-to-connection. no
modelAtScale model identifier (cube name).no
model-nameModel name used when reading or generating an SML project, or the model label/unique_name to validate. Used by: extract-model-from-sml, generate-sml-from-connection, generate-sml-from-ddl, atscale-list-model-errors. no
output-model-fileOutput path for the extracted model YAML (default: model.yaml).nomodel.yaml
sml-dirPath to the SML project directory. Used by: extract-model-from-sml, atscale-deploy-catalog (required), atscale-list-model-errors (local mode — provide this OR repo-name/repo-id). no
output-dirOutput directory. For generate-sml-from-connection / generate-sml-from-ddl: SML output directory (default: sml/). For generate-data-from-data-shape: CSV output directory (default: data/). no
schemaDatabase schema to scope SML generation to.no
catalog-nameCatalog (database) name for the SML project.no
pii-severityMinimum PII severity level to tag in generated SML (none/low/medium/high).no
sample-sizeNumber of rows to sample per table for PII detection.no
fact-tablesComma-separated list of table names to treat as fact tables, overriding automatic classification. Used by: generate-sml-from-connection, generate-sml-from-ddl. no
camel-case-filesSet to "true" to use camelCase of the source table name for dataset and dimension filenames. Default: raw table name. Used by: generate-sml-from-connection, generate-sml-from-ddl. nofalse
camel-case-measuresSet to "true" to use camelCase of the source column name for metric labels. Default: raw column name. Deprecated — use label-style instead. Used by: generate-sml-from-connection, generate-sml-from-ddl. nofalse
label-styleLabel style for all SML labels: title-case (default), camel-case, or noneno""
min-hierarchies-per-dimMinimum number of hierarchies a dimension must have to be included in the generated model. Dimensions below this threshold are dropped. Default: 1. Used by: generate-sml-from-connection, generate-sml-from-ddl. no1
max-hierarchies-per-dimMaximum number of hierarchies to keep per dimension. Extra hierarchies beyond this limit are truncated. Default: 4. Used by: generate-sml-from-connection, generate-sml-from-ddl. no4
sml-config-filePath to an SML style config file (sml.style.yaml) to read settings from. CLI inputs take priority over the file. Effective settings are always written to <output-dir>/sml.style.yaml after generation. Used by: generate-sml-from-connection, generate-sml-from-ddl. no
ddl-filePath to the DDL SQL file to parse for SML generation.no
xml-filePath to the AtScale XML project file (project_2_0 format) to convert.no
connection-typeDatabase dialect for the connection file (e.g. "snowflake", "bigquery"). Used by: generate-sml-from-xml. no
connection-dbDatabase or project name written into the connection file. When set, individual datasets use a plain table name instead of a nested db/schema/name object. Used by: generate-sml-from-xml. no
connection-schemaSchema or dataset name written into the connection file. When set, individual datasets use a plain table name instead of a nested db/schema/name object. Used by: generate-sml-from-xml. no
plan-filePath to the option YAML file produced by generate-shared-model-plan. Used by: apply-shared-model-plan-option. no
shared-dirDirectory where shared SML files (dimensions, datasets, models) will be written. Used by: apply-shared-model-plan-option. no
remove-sourcesWhen "true", delete local source copies after writing the shared file. Used by: apply-shared-model-plan-option. no
input-dirsComma-separated list of SML output directories to analyse for sharing opportunities. Used by: generate-shared-model-plan. no
thresholdSimilarity threshold 0–1 for generate-shared-model-plan; lower values surface more options (default 0.5). Used by: generate-shared-model-plan. no
max-per-subjectMaximum number of recommendations to emit per subject entity (dataset, dimension, or model pair). Prevents flooding output with near-duplicate options for the same entity (default 3). Used by: generate-shared-model-plan. no
model-filePath to the model YAML file (output of extract-model-from-atscale or extract-model-from-sml). Used by: generate-namespace-from-model, generate-metrics-from-model, generate-tableau-from-namespace, generate-queries-from-model. no
titleTitle for the generated namespace / Tableau workbook.no
max-suggestionsMaximum number of analysis suggestions to generate (default: 25).no25
min-scoreMinimum relevance score for included suggestions (default: 0.5).no0.5
include-tuplesInclude multi-dimension suggestions (true/false, default: true). Used by: generate-metrics-from-model. notrue
output-fileOutput file path. For generate-namespace-from-model: namespace YAML output (omit to print to stdout). For generate-metrics-from-model: suggestions output (omit to print to stdout). For extract-ddl-from-connection: DDL output (omit to print to stdout). For generate-atscale-install-yaml: path for the generated values.yaml (default: values.yaml). For execute-query-on-connection: path to write query results (CSV for SQL, XML for XMLA). no
namespace-filePath to the namespace YAML file.no
aliases-filePath to an optional aliases YAML file mapping friendly names to model columns. Used by: generate-tableau-from-namespace, generate-excel-from-namespace, generate-powerbi-from-namespace. no
tableau-versionTarget Tableau version — 2024 or 2025 (default: 2025).no2025
target-fileOutput path for the generated Tableau or Excel workbook.no
target-folderOutput folder name for the generated Power BI project (written under output/). Used by: generate-powerbi-from-namespace. nopowerbi
databaseDatabase (catalog) name to embed in the SML connection file.no
dialectDatabase dialect. For generate-sml-from-ddl: e.g. snowflake, postgresql — auto-detected from filename if omitted; when snowflake, dataset table names are uppercased. For generate-ddl-from-data-shape: ansi (default), postgresql, snowflake, mysql, or bigquery. BigQuery omits PRIMARY KEY / FOREIGN KEY constraints. For generate-data-from-data-shape-to-connection: when omitted, the dialect is read from the connection configuration (sql.dialect); falls back to ansi. no
dry-runWhen "true", skips all side effects. - apply-shared-model-plan-option: no files written or deleted, actions are only logged. - execute-sql-on-connection: prints statements without executing them. no
sql-filePath to the SQL file to execute.no
on-errorBehaviour when a statement fails — stop (default) or continue.nostop
sml-pathPath to the SML output directory or a model.yml file. Used by: extract-data-shape-from-connection. no
target-fact-rowsTarget row count when sampling large fact tables (default: 100000; 0 = no sampling). Used by: extract-data-shape-from-connection. no100000
target-column-rowsTarget row count for measure column distribution sampling (default: 10000; 0 = no sampling). Used by: extract-data-shape-from-connection. no10000
tablesampleUse TABLESAMPLE SYSTEM for fact sampling (default: true). Set to false for databases that do not support TABLESAMPLE (e.g. MySQL). Used by: extract-data-shape-from-connection. notrue
serialWhen "true", profile dimensions one at a time instead of in parallel (default: false). Use when the database enforces a low per-user connection limit. Used by: extract-data-shape-from-connection. nofalse
preserve-meta-dataWhen "true": extract-data-shape-from-connection: stores original table/column names in the fingerprint metadata block. generate-ddl-from-data-shape, generate-data-from-data-shape, generate-data-from-data-shape-to-connection: uses the fingerprint metadata block to recreate tables with their original names. Only has effect on generation operations when the fingerprint was extracted with this flag set to "true". Default: "false". nofalse
input-filePath to the data-shape.yaml fingerprint file. Used by: generate-ddl-from-data-shape, generate-data-from-data-shape, generate-data-from-data-shape-to-connection. nodata-shape.yaml
scale-factorScale row and member counts by this factor (default: 1.0; use < 1 for smaller datasets). Used by: generate-data-from-data-shape, generate-data-from-data-shape-to-connection. no1.0
seedInteger random seed for reproducible synthetic data output. Used by: generate-data-from-data-shape, generate-data-from-data-shape-to-connection. no
create-tablesEmit CREATE TABLE statements before inserting data (default: false). Used by: generate-data-from-data-shape-to-connection. nofalse
drop-if-existsDROP TABLE IF EXISTS before creating tables — implies create-tables (default: false). Used by: generate-data-from-data-shape-to-connection. nofalse
batch-sizeNumber of rows per INSERT statement (default: 500). Used by: generate-data-from-data-shape-to-connection. no500
query-fileJSON file produced by extract-queries-from-atscale, or a Gatling ingest CSV. Used by: execute-atscale-query-harness, execute-query-on-connection. no
ingest-fileIngest CSV (sampler_name,sql_text or sampler_name,atscale_query_id,sql_text). Used by: execute-atscale-query-harness. no
task-fileExecutor task YAML or JSON file (executor_tasks/*.yaml schema). Used by: execute-atscale-query-harness. no
protocolQuery protocol: xmla or sql (default: xmla). Ignored in task-file mode. Used by: execute-atscale-query-harness, execute-query-on-connection. noxmla
query-nameName of the specific query to execute from the query file (matches queryName / sampler_name). Used by: execute-query-on-connection. no
concurrent-usersNumber of parallel query workers (default: 1). Ignored in task-file mode. Used by: execute-atscale-query-harness. no1
throttle-msMinimum milliseconds between query dispatches per worker (default: 5). Used by: execute-atscale-query-harness. no5
run-idLabel stamped on every output row. Auto-generated (YYYY-MM-DD-XXXXXXXXXX) if omitted. Used by: execute-atscale-query-harness. no
duration-minutesRun for this many minutes cycling the query list (0 = one pass, default: 0). Used by: execute-atscale-query-harness. no0
redactWhen "true", omits inbound query text from the output CSV (default: false). Used by: execute-atscale-query-harness. nofalse
annotate-queriesWhen "true" (default), prepends a /* {run_query_uuid, original_text_hash} */ comment to each executed query so AtScale's query log carries correlation fields. Set to "false" to send queries unmodified. Used by: execute-atscale-query-harness. notrue
window-daysNumber of days to look back in AtScale query history (default: 7). Used by: extract-query-stats-from-atscale. no7
start-dateExplicit window start in ISO-8601 format (e.g. 2025-01-01T00:00:00Z). Overrides window-days. Used by: extract-query-stats-from-atscale. no
end-dateExplicit window end in ISO-8601 format. Defaults to now when start-date is set. Used by: extract-query-stats-from-atscale. no
monthlyWhen "true", also generates a month-by-month breakdown CSV. Used by: extract-query-stats-from-atscale. nofalse
monthly-yearCalendar year for the monthly breakdown (e.g. 2025). Defaults to current year. Used by: extract-query-stats-from-atscale. no
limitPage size for the AtScale query history API. Used by: extract-query-stats-from-atscale. no
db-schemaDatabase schema used when fetching execution plans from the target data source. Used by: generate-enhanced-query-results. no
results-filePath to the run-results CSV produced by execute-atscale-query-harness. Used by: generate-enhanced-query-results. no
daysLook-back window in days when searching the AtScale query log (default: 7). Used by: generate-enhanced-query-results. no7
target-connection-nameConnection name within the connections file for the target data source. When provided, generate-enhanced-query-results connects to the target database and fetches an execution plan (EXPLAIN) for each outbound query, stored in the 'run_outbound_execution_plan' column. Supported dialects: snowflake (SYSTEM$EXPLAIN_PLAN_JSON), postgres (EXPLAIN FORMAT JSON), redshift (EXPLAIN). Used by: generate-enhanced-query-results. no
file-aPath to the first run log (execute-atscale-query-harness CSV) or enhanced output (generate-enhanced-query-results CSV). Used by: execute-run-analysis. no
file-bPath to the second run log or enhanced output to compare against file-a. Used by: execute-run-analysis. no
join-keyColumn to join queries across the two files: 'original_text_hash' (default) or 'original_atscale_query_id'. Used by: execute-run-analysis. nooriginal_text_hash
duration-variance-pctPercentage threshold for flagging duration differences. Pairs where |(b−a)/a|×100 exceeds this value are flagged. Default: 20. Used by: execute-run-analysis. no20
summary-filePath to write the plain-text summary report. Used by: execute-run-analysis. no
comparison-filePath to write the row-by-row comparison CSV. Used by: execute-run-analysis. no
outliers-filePath to write the filtered outliers CSV containing only pairs flagged for a row-count mismatch or a duration outside the variance threshold. Same schema as comparison-file. Used by: execute-run-analysis. no
xmla-output-filePath to write the generated XMLA (MDX) query JSON file. Used by: generate-queries-from-sml, generate-queries-from-model. no
sql-output-filePath to write the generated SQL query JSON file. Used by: generate-queries-from-sml, generate-queries-from-model. no
cube-nameOverride the cube name used in MDX FROM and SQL FROM clauses. Defaults to the model label from the SML model file. Used by: generate-queries-from-sml, generate-queries-from-model. no
tablesComma-separated table names or wildcard patterns to extract (e.g. "Dim*,FactSales"). Omit to extract all tables in the schema. no
case-insensitiveWhen "true", match table names case-insensitively. Default is case-sensitive matching. Used by: extract-ddl-from-connection. no
hostnameFully-qualified domain name (or IP) for the AtScale ingress and TLS certificate. Used by: generate-atscale-install-yaml. no
tls-cert-filePath to an existing PEM certificate file. When omitted a self-signed certificate is generated automatically. Used by: generate-atscale-install-yaml. no
tls-key-filePath to an existing PEM private key file. Required when tls-cert-file is set. Used by: generate-atscale-install-yaml. no
license-keyAtScale license key to embed in values.yaml (atscale-entitlement.entitlement.licenseKey). If omitted the field is left blank; the key can be uploaded via the UI after install. Store as a secret and pass via secrets.ATSCALE_LICENSE_KEY. Used by: generate-atscale-install-yaml. no
enable-mcpEnable the AtScale MCP server sub-chart (atscale-mcp.enabled). Accepts true/false, yes/no, 1/0, on/off. Defaults to false. Used by: generate-atscale-install-yaml. nofalse
minimalEmit additional Helm values that reduce the hardware footprint: disables telemetry, removes the Redis replica, and shrinks default PVC sizes. Accepts true/false, yes/no, 1/0, on/off, or standalone flag. Defaults to false. Used by: generate-atscale-install-yaml. nofalse
external-postgresWire AtScale to an externally-managed PostgreSQL instance instead of the bundled db sub-chart: disables the in-cluster database (global.atscale.db.enabled=false, db.enabled=false) and sets each service's externalDatabase block to read from Kubernetes secrets. Connection credentials (host/port/user/password) are NOT taken as inputs — stubbed secret manifests are emitted as a header comment for the operator to fill in and apply. Keycloak is pinned to a dedicated `keycloak` Postgres schema (KC_DB_SCHEMA) rather than `public`; the operator must create that schema before install (a CREATE SCHEMA statement is included in the emitted header comment). Accepts true/false, yes/no, 1/0, on/off, or standalone flag. Defaults to false. Used by: generate-atscale-install-yaml. nofalse
gatekeeper-compliantEmit Helm values that satisfy common OPA Gatekeeper constraints: image.pullPolicy=Always and serviceAccount.create=true per subchart, plus resource requests/limits via global.resourcesPreset (poc when combined with minimal, otherwise prod). A header comment in the output lists residual constraints that require a namespace exemption. Accepts true/false, yes/no, 1/0, on/off, or standalone flag. Defaults to false. Used by: generate-atscale-install-yaml. nofalse
atscale-connection-nameName of the AtScale connection entry in the connections file (must have an atscale: block). Used by: atscale-list-data-sources, atscale-create-data-source, atscale-list-repos, atscale-create-repo, atscale-list-deployments, atscale-deploy-catalog, atscale-list-model-errors, generate-ddl-from-atscale. no
data-source-nameName of the data source as registered in AtScale (matches the display name or connectionId). Used to resolve the connection ID for metadata queries. Used by: generate-ddl-from-atscale. no
new-connection-nameName of the SQL connection entry to register as a data source (must have a sql: block). Used by: atscale-create-data-source. no
aggregate-schemaSchema (or BigQuery dataset) for aggregate table storage. Used by: atscale-create-data-source. no
dw-nameDisplay name for the data warehouse in AtScale (max 128 chars). Defaults to new-connection-name when omitted. Used by: atscale-create-data-source. no
connection-idLogical connection ID embedded in SML files. Defaults to new-connection-name when omitted. Used by: atscale-create-data-source. no
access-usersComma-separated AtScale usernames to grant access to the data warehouse. Omit or pass empty string to grant access to the built-in 'everyone' group instead. Used by: atscale-create-data-source. no""
aggregate-project-idBigQuery only: GCP project ID for aggregate storage. Defaults to sql.project from the connection config. Used by: atscale-create-data-source. no
insecureSkip TLS certificate verification. Overrides the value in the connections file. Accepts true/false, yes/no, 1/0, on/off. Defaults to true. Used by: atscale-list-data-sources, atscale-create-data-source, atscale-list-repos, atscale-create-repo, atscale-list-deployments, atscale-deploy-catalog, atscale-list-model-errors, generate-ddl-from-atscale. notrue
repo-nameHuman-readable name for the git repository, or name of an AtScale-connected git repository. Used by: atscale-create-repo, atscale-deploy-catalog (provide this OR repo-id), atscale-list-model-errors (remote mode — provide this OR sml-dir/repo-id). no
repo-urlGit remote URL (HTTPS or SSH) for the repository. Used by: atscale-create-repo. no
repo-typeRepository type: 'catalog' (default) or 'global_settings'. Used by: atscale-create-repo. nocatalog
visible-branches-patternGlob pattern controlling which branches are visible in the AtScale UI. Used by: atscale-create-repo. no
default-branchDefault branch name (e.g. 'main'). Used by: atscale-create-repo. no
project-nameCatalog project name to deploy as. Defaults to {catalog.unique_name}_{repo.defaultBranch}. Used by: atscale-deploy-catalog. no
tableau-serversOptional JSON array of Tableau servers to publish to after deployment. Example: '[{"name":"my-ts","sites":["Default"]}]' Used by: atscale-deploy-catalog. no
repo-idUUID of an AtScale-connected git repository. Used by: atscale-deploy-catalog (provide this OR repo-name), atscale-list-model-errors (remote mode — provide this OR sml-dir/repo-name). no
branchBranch name to check out when cloning in remote mode (defaults to repo default branch). Used by: atscale-list-model-errors. no
microk8s-hostnameIP address or hostname of the MicroK8s server.no
vm-admin-passwordPassword for the 'atscale' OS user on the MicroK8s server. Pass as a secret — supply via secrets.VM_ADMIN_PASSWORD in the caller workflow. no
atscale-versionAtScale Helm chart version to deploy (default: 2026.1.0).no2026.1.0
portPort for the GraphQL HTTP server. Used by: execute-web-services. no4000
hostBind address for the GraphQL HTTP server. Used by: execute-web-services. nolocalhost

no outputs