├── .devcontainer └── devcontainer.json ├── .gitattributes ├── .github ├── dependabot.yml └── workflows │ ├── open-pr-on-commit.yaml │ ├── push-on-merge-staging.yaml │ └── push-on-merge.yaml ├── .vscode └── extensions.json ├── README.md ├── f ├── a │ ├── folder.meta.yaml │ ├── usable_undefined.script.lock │ ├── usable_undefined.script.yaml │ └── usable_undefined.ts ├── app_ccs │ └── folder.meta.yaml ├── app_custom │ ├── My_Component.resource.yaml │ └── folder.meta.yaml ├── app_groups │ ├── folder.meta.yaml │ ├── group_1.resource.yaml │ └── group_2.resource.yaml ├── app_themes │ ├── folder.meta.yaml │ ├── theme_0.resource.yaml │ ├── theme_1.resource.yaml │ └── theme_2.resource.yaml ├── b │ ├── folder.meta.yaml │ ├── gorgeous_script.script.lock │ ├── gorgeous_script.script.yaml │ └── gorgeous_script.ts ├── c │ ├── folder.meta.yaml │ ├── trusted_script.script.lock │ ├── trusted_script.script.yaml │ └── trusted_script.ts ├── d │ ├── booming_script.script.lock │ ├── booming_script.script.yaml │ ├── booming_script.ts │ └── folder.meta.yaml ├── delivery │ ├── cleared_script.deno.ts │ ├── cleared_script.script.lock │ ├── cleared_script.script.yaml │ └── folder.meta.yaml ├── e │ ├── cheaper_script.script.lock │ ├── cheaper_script.script.yaml │ ├── cheaper_script.ts │ └── folder.meta.yaml ├── examples │ ├── efficient_script.deno.ts │ ├── efficient_script.script.lock │ ├── efficient_script.script.yaml │ ├── folder.meta.yaml │ ├── product_dashboard.app │ │ ├── all_product_data.inline_script.lock │ │ ├── all_product_data.inline_script.ts │ │ ├── app.yaml │ │ ├── one_product_detail.inline_script.lock │ │ ├── one_product_detail.inline_script.ts │ │ ├── product_brand_count.inline_script.lock │ │ ├── product_brand_count.inline_script.ts │ │ ├── product_category_count.inline_script.lock │ │ ├── product_category_count.inline_script.ts │ │ ├── product_stock_total_worth.inline_script.lock │ │ ├── product_stock_total_worth.inline_script.ts │ │ ├── stock_worth_title.inline_script.lock │ │ └── stock_worth_title.inline_script.ts │ ├── snappy_script.script.lock │ ├── snappy_script.script.yaml │ └── snappy_script.ts ├── examples_etl │ └── folder.meta.yaml ├── f │ ├── folder.meta.yaml │ ├── triumphant_script.script.lock │ ├── triumphant_script.script.yaml │ └── triumphant_script.ts ├── foo │ ├── compatible_script.script.lock │ ├── compatible_script.script.yaml │ ├── compatible_script.ts │ ├── folder.meta.yaml │ ├── low_risk_script.deno.ts │ ├── low_risk_script.script.lock │ └── low_risk_script.script.yaml ├── g │ ├── folder.meta.yaml │ ├── mature_script.script.lock │ ├── mature_script.script.yaml │ └── mature_script.ts ├── git │ └── folder.meta.yaml ├── group │ ├── copy_of_weroew_prew_porkewp_orewpo_r.deno.ts │ ├── copy_of_weroew_prew_porkewp_orewpo_r.script.lock │ ├── copy_of_weroew_prew_porkewp_orewpo_r.script.yaml │ └── folder.meta.yaml ├── h │ ├── exhilarating_script.script.lock │ ├── exhilarating_script.script.yaml │ ├── exhilarating_script.ts │ └── folder.meta.yaml ├── i │ ├── folder.meta.yaml │ ├── speedy_script.script.lock │ ├── speedy_script.script.yaml │ └── speedy_script.ts ├── j │ ├── adoring_script.script.lock │ ├── adoring_script.script.yaml │ ├── adoring_script.ts │ └── folder.meta.yaml ├── k │ ├── folder.meta.yaml │ ├── happier_script.script.lock │ ├── happier_script.script.yaml │ └── happier_script.ts ├── l │ ├── folder.meta.yaml │ ├── rational_script.script.lock │ ├── rational_script.script.yaml │ └── rational_script.ts ├── m │ ├── folder.meta.yaml │ ├── grand_script.script.lock │ ├── grand_script.script.yaml │ └── grand_script.ts ├── n │ ├── folder.meta.yaml │ ├── quieter_script.script.lock │ ├── quieter_script.script.yaml │ └── quieter_script.ts ├── o │ ├── fortunate_script.script.lock │ ├── fortunate_script.script.yaml │ └── fortunate_script.ts └── user │ ├── ambitious_script.deno.ts │ ├── ambitious_script.script.lock │ ├── ambitious_script.script.yaml │ ├── benevolent_mysql.resource.yaml │ ├── benevolent_mysql.variable.yaml │ ├── folder.meta.yaml │ ├── foo.pg.sql │ ├── foo.script.yaml │ ├── innocuous_script.deno.ts │ ├── innocuous_script.script.lock │ └── innocuous_script.script.yaml ├── img ├── git_sync_tab.png ├── resource_creation.png └── token_creation.png ├── wmill-lock.yaml └── wmill.yaml /.devcontainer/devcontainer.json: -------------------------------------------------------------------------------- 1 | // For format details, see https://aka.ms/devcontainer.json. For config options, see the 2 | // README at: https://github.com/devcontainers/templates/tree/main/src/typescript-node 3 | { 4 | "name": "Node.js & TypeScript", 5 | // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile 6 | "image": "mcr.microsoft.com/devcontainers/typescript-node:1-20-bullseye", 7 | "features": { 8 | "ghcr.io/devcontainers-community/features/deno:1": {} 9 | }, 10 | "customizations": { 11 | "vscode": { 12 | "extensions": ["windmill-labs.windmill"] 13 | }, 14 | "settings": { 15 | "extensions.verifySignature": false 16 | } 17 | } 18 | // Features to add to the dev container. More info: https://containers.dev/features. 19 | // "features": {}, 20 | 21 | // Use 'forwardPorts' to make a list of ports inside the container available locally. 22 | // "forwardPorts": [], 23 | 24 | // Use 'postCreateCommand' to run commands after the container is created. 25 | // "postCreateCommand": "yarn install", 26 | 27 | // Configure tool-specific properties. 28 | // "customizations": {}, 29 | 30 | // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root. 31 | // "remoteUser": "root" 32 | } 33 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | .wmill/* linguist-generated=true 2 | .wmill/**/* linguist-generated=true 3 | .wmill linguist-generated=true 4 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # To get started with Dependabot version updates, you'll need to specify which 2 | # package ecosystems to update and where the package manifests are located. 3 | # Please see the documentation for more information: 4 | # https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates 5 | # https://containers.dev/guide/dependabot 6 | 7 | version: 2 8 | updates: 9 | - package-ecosystem: "devcontainers" 10 | directory: "/" 11 | schedule: 12 | interval: weekly 13 | -------------------------------------------------------------------------------- /.github/workflows/open-pr-on-commit.yaml: -------------------------------------------------------------------------------- 1 | name: Windmill Pull Request 2 | on: 3 | push: 4 | branches: 5 | - wm_deploy/github-sync-example-staging/** 6 | 7 | env: 8 | TARGET_BRANCH: main 9 | 10 | jobs: 11 | submit_pull_requests: 12 | runs-on: ubuntu-latest 13 | permissions: 14 | contents: read 15 | pull-requests: write 16 | 17 | steps: 18 | - uses: actions/checkout@v4 19 | - name: Create pull request 20 | run: | 21 | gh pr view ${{ github.ref_name }} \ 22 | && gh pr reopen ${{ github.ref_name }} \ 23 | || gh pr create -B ${{ env.TARGET_BRANCH }} -H ${{ github.ref_name }} \ 24 | --title "${{github.event.head_commit.message }}" \ 25 | --body "PR created by Github action '${{ github.workflow }}'" 26 | env: 27 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 28 | -------------------------------------------------------------------------------- /.github/workflows/push-on-merge-staging.yaml: -------------------------------------------------------------------------------- 1 | name: "Push staging to Windmill workspace" 2 | on: 3 | workflow_dispatch: 4 | push: 5 | branches: 6 | - "staging" 7 | # if the windmill workspace is persisted in a subfolder of this repos, you can add the following to avoid pushing to windmill when there's no change 8 | # paths: 9 | # - wm/** 10 | 11 | env: 12 | WMILL_URL: https://app.windmill.dev/ 13 | WMILL_WORKSPACE: github-sync-example-staging 14 | 15 | jobs: 16 | sync: 17 | environment: windmill 18 | runs-on: "ubuntu-latest" 19 | steps: 20 | - name: Checkout 21 | uses: actions/checkout@v3 22 | 23 | - uses: actions/setup-node@v4 24 | with: 25 | node-version: 20 26 | 27 | # We check the commit to make sure it doesn't start with [WM] which commits coming from Windmill Git Sync do.\ 28 | # If that's the case, then we stop the workflow as we want to avoid overwriting changes that are out-of-sync 29 | # (for instance if one were to deploy in quick succession) 30 | - name: Check commit message 31 | id: check_message 32 | run: | 33 | COMMIT_MESSAGE="${{ github.event.head_commit.message }}" 34 | if [[ "$COMMIT_MESSAGE" =~ ^\[WM\] ]]; then 35 | echo "Commit message starts with '[WM]', skipping push to Windmill to avoid overwriting deploy that immediately follows it" 36 | echo "skip=skip" >> $GITHUB_OUTPUT 37 | fi 38 | 39 | # (push will pull first to detect conflicts and only push actual changes) 40 | - name: Push changes 41 | if: steps.check_message.outputs.skip != 'skip' 42 | run: | 43 | npm install -g windmill-cli@1.466.2 44 | wmill sync push --yes --skip-variables --skip-secrets --skip-resources --workspace ${{ env.WMILL_WORKSPACE }} --token ${{ secrets.WMILL_TOKEN }} --base-url ${{ env.WMILL_URL }} 45 | -------------------------------------------------------------------------------- /.github/workflows/push-on-merge.yaml: -------------------------------------------------------------------------------- 1 | name: "Push main to Windmill workspace" 2 | on: 3 | workflow_dispatch: 4 | push: 5 | branches: 6 | - "main" 7 | # if the windmill workspace is persisted in a subfolder of this repos, you can add the following to avoid pushing to windmill when there's no change 8 | # paths: 9 | # - wm/** 10 | 11 | env: 12 | WMILL_URL: https://app.windmill.dev/ 13 | WMILL_WORKSPACE: github-sync-example-prod 14 | 15 | jobs: 16 | sync: 17 | environment: windmill 18 | runs-on: "ubuntu-latest" 19 | steps: 20 | - name: Checkout 21 | uses: actions/checkout@v3 22 | 23 | - uses: actions/setup-node@v4 24 | with: 25 | node-version: 20 26 | 27 | # We check the commit to make sure it doesn't start with [WM] which commits coming from Windmill Git Sync do.\ 28 | # If that's the case, then we stop the workflow as we want to avoid overwriting changes that are out-of-sync 29 | # (for instance if one were to deploy in quick succession) 30 | - name: Check commit message 31 | id: check_message 32 | run: | 33 | COMMIT_MESSAGE="${{ github.event.head_commit.message }}" 34 | if [[ "$COMMIT_MESSAGE" =~ ^\[WM\] ]]; then 35 | echo "Commit message starts with '[WM]', skipping push to Windmill to avoid overwriting deploy that immediately follows it" 36 | echo "skip=skip" >> $GITHUB_OUTPUT 37 | fi 38 | 39 | # (push will pull first to detect conflicts and only push actual changes) 40 | - name: Push changes 41 | if: steps.check_message.outputs.skip != 'skip' 42 | run: | 43 | npm install -g windmill-cli@1.466.2 44 | wmill sync push --yes --skip-variables --skip-secrets --skip-resources --workspace ${{ env.WMILL_WORKSPACE }} --token ${{ secrets.WMILL_TOKEN }} --base-url ${{ env.WMILL_URL }} 45 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "windmill-labs.windmill" 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Windmill Sync Example 2 | 3 | Example repo that demonstrate how to leverage Github to orchestrate your 4 | development cycles with Windmill. 5 | 6 | ## How it works 7 | 8 | This repo illustrates the following process: 9 | 10 | - Users iterates and make their changes in a "staging" Windmill workspace, 11 | called `github-sync-example-staging` for this tutorial 12 | - Everytime a Windmill App, Flow or Script is deployed to that workspace (via 13 | Windmill's UI), Windmill automatically commits it to this repo and creates one 14 | branch per app/flow/script. 15 | - On every commit, PRs are automatically created via a Github action. Approved 16 | Github users can review and merge those PRs. 17 | - Everytime a PR is merged, another Github action automatically deploys the 18 | change to a "production" Windmill workspace, called `github-sync-example-prod` 19 | for this tutorial 20 | 21 | ## Setup 22 | 23 | #### Github repository setup 24 | 25 | First the Github repo needs to be setup and Windmill needs to be able to commit 26 | to it. 27 | 28 | 1. Create a Github repository 29 | 1. Generate a 30 | [Github token with write permission](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#creating-a-fine-grained-personal-access-token) 31 | to this repository. This is necessary for Windmill to push commits to the 32 | repo everytime a change is made to the staging workspase. (keep the token 33 | value somewhere, we will need it in the following setup steps) 34 | 1. In the repository settings > Actions > General, tick the 35 | [Allow GitHub Actions to create and approve pull requests](https://docs.github.com/en/enterprise-server@3.10/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#preventing-github-actions-from-creating-or-approving-pull-requests). 36 | This is necessary for the Github action automatically creating PRs when 37 | Windmill commits a change 38 | 1. From Windmill, create a token under User settings > Token and 39 | [save it as a secret](https://docs.github.com/en/actions/security-guides/using-secrets-in-github-actions#creating-secrets-for-a-repository) 40 | named `WMILL_TOKEN` in the repo settings > "Secret and Variable" > "Actions". 41 | This is necessary for Windmill to push to the production workspace 42 | ![](./img/token_creation.png) 43 | 44 | #### Windmill setup 45 | 46 | 1. In Windmill, create a `git_repository` resource pointing to the Github 47 | repository and containing the token generated previously. You URL should be 48 | `https://[USERNAME]:[TOKEN]@github.com/[ORG|USER]/[REPO_NAME].git`. Note that 49 | you have the possibility to input a custom branch name and a subfolder in 50 | this resource. Given that we are going to request Windmill to create one 51 | branch per script/flow/app, setting a custom branch will have no effect. 52 | However, if you wish to persist the windmill workspace in a subfolder of your 53 | repository, you can set it here. ![](./img/resource_creation.png) 54 | 1. In Windmill workspace settings > Git sync tab, pick the `git_repository` 55 | resource and toggle ON "Create one branch per per deployed script/flow/app" 56 | ![](./img/git_sync_tab.png) 57 | 58 | #### Github actions setup 59 | 60 | Two actions are needed. 61 | 62 | 1. The first one to automatically create a PR when Windmill commits a change 63 | after a user deployed a script/flow/app in the staging workspace. It is 64 | [open-pr-on-commit.yaml](./.github/workflows/open-pr-on-commit.yaml). All 65 | branches created by Windmill will have a `wm_deploy/` prefix, which is handy 66 | to triger this action only when a branch mathcing this pattern is created. 67 | 1. The second one to automatically push the content of the repo to the Windmill 68 | production workspace when a PR is merged. It is 69 | [push-on-merge.yaml](./.github/workflows/push-on-merge.yaml). This action 70 | uses the [Github CLI](https://cli.github.com/) which is available by default 71 | on Github action workers. 72 | -------------------------------------------------------------------------------- /f/a/folder.meta.yaml: -------------------------------------------------------------------------------- 1 | display_name: a 2 | extra_perms: 3 | u/admin: true 4 | owners: 5 | - u/admin 6 | -------------------------------------------------------------------------------- /f/a/usable_undefined.script.lock: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": {} 3 | } 4 | //bun.lockb 5 | -------------------------------------------------------------------------------- /f/a/usable_undefined.script.yaml: -------------------------------------------------------------------------------- 1 | summary: '' 2 | description: '' 3 | lock: '!inline f/a/usable_undefined.script.lock' 4 | kind: script 5 | schema: 6 | $schema: 'https://json-schema.org/draft/2020-12/schema' 7 | type: object 8 | properties: 9 | a: 10 | type: number 11 | description: '' 12 | default: null 13 | b: 14 | type: string 15 | description: '' 16 | default: null 17 | enum: 18 | - my 19 | - enum 20 | e: 21 | type: string 22 | description: '' 23 | default: inferred type string from default arg 24 | f: 25 | type: object 26 | description: '' 27 | default: 28 | nested: object 29 | properties: 30 | nested: 31 | type: string 32 | required: 33 | - a 34 | - b 35 | -------------------------------------------------------------------------------- /f/a/usable_undefined.ts: -------------------------------------------------------------------------------- 1 | // import { toWords } from "number-to-words@1" 2 | import * as wmill from "windmill-client" 3 | 4 | // fill the type, or use the +Resource type to get a type-safe reference to a resource 5 | // type Postgresql = object 6 | foooooo 7 | export async function main( 8 | a: number, 9 | b: "my" | "enum", 10 | //c: Postgresql, 11 | //d: wmill.S3Object, // for large files backed by S3 (https://www.windmill.dev/docs/core_concepts/persistent_storage/large_data_files) 12 | e = "inferred type string from default arg", 13 | f = { nested: "object" }, 14 | ) { 15 | // let x = await wmill.getVariable('u/user/foo') 16 | return { foo: a }; 17 | } 18 | -------------------------------------------------------------------------------- /f/app_ccs/folder.meta.yaml: -------------------------------------------------------------------------------- 1 | display_name: App Custom Components 2 | extra_perms: 3 | g/all: false 4 | owners: [] 5 | -------------------------------------------------------------------------------- /f/app_custom/My_Component.resource.yaml: -------------------------------------------------------------------------------- 1 | description: null 2 | value: 3 | name: My Component 4 | value: 5 | additionalLibs: 6 | reactVersion: 18.2.0 7 | js: > 8 | (function(){"use strict";try{if(typeof document<"u"){var 9 | o=document.createElement("style");o.appendChild(document.createTextNode(".My_Component{font-family:Inter,system-ui,Avenir,Helvetica,Arial,sans-serif;line-height:1.5;font-weight:400;color-scheme:light 10 | dark;color:#ffffffde;background-color:#999;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-text-size-adjust:100%}.My_Component 11 | a{font-weight:500;color:#646cff;text-decoration:inherit}.My_Component 12 | a:hover{color:#535bf2}.My_Component 13 | h1{font-size:3.2em;line-height:1.1}.My_Component 14 | button{border-radius:8px;border:1px solid transparent;padding:.6em 15 | 1.2em;font-size:1em;font-weight:500;font-family:inherit;background-color:#1a1a1a;cursor:pointer;transition:border-color 16 | .25s}.My_Component 17 | button:hover{border-color:#646cff}.My_Component>button:focus,.My_Component>button:focus-visible{outline:4px 18 | auto -webkit-focus-ring-color}@media (prefers-color-scheme: 19 | light){.My_Component{color:#213547;background-color:#fff}.My_Component 20 | a:hover{color:#747bff}.My_Component 21 | button{background-color:#f9f9f9}}.My_Component{margin:0 22 | auto;text-align:center}.My_Component 23 | .card{padding:2em}")),document.head.appendChild(o)}}catch(e){console.error("vite-plugin-css-injected-by-js",e)}})(); 24 | 25 | var wmc=function(i,e,u){"use strict";const g="";function 26 | m({passSetters:t,setOutput:d,renderInit:a}){const[c,r]=e.useState(a),[s,p]=e.useState({count:0}),[y,f]=e.useState([]);return 27 | e.useEffect(()=>{const n=[];let 28 | l=0;t({onInput:E=>{l++,n.push({i:l,value:E}),f([...n])},onRender:r})},[r,t]),c?e.createElement(e.Fragment,null,e.createElement("h1",null,"Windmill 29 | Custom Component"),e.createElement("div",null,"State: 30 | ",e.createElement("pre",null,JSON.stringify(s))),e.createElement("div",{style:{width:"100%",display:"flex",alignItems:"center",justifyContent:"center"}}," 31 | ",e.createElement("div",{className:"card",style:{display:"flex",gap:"20px"}},"Inputs:",e.createElement("div",{style:{overflow:"auto",maxHeight:"300px",border:"1px 32 | solid",minWidth:"50px",backgroundColor:"gray"}},y.slice(-10).map(({i:n,value:l})=>e.createElement("div",{style:{textAlign:"left"},key:n},n,": 33 | ",JSON.stringify(l)))," 34 | ")),e.createElement("div",{className:"card",style:{display:"flex",gap:"20px"}},e.createElement("div",null,e.createElement("button",{style:{fontSize:"12px"},onClick:()=>{p(n=>({count:n.count+1})),d(s)}},"Increment 35 | state and set output to state"," 36 | "))))):e.createElement(e.Fragment,null)}function 37 | o(t){u.createRoot(document.getElementById(t.id)).render(e.createElement(e.StrictMode,null,e.createElement(m,{passSetters:t.passSetters,setOutput:t.setOutput,renderInit:t.render})))}return 38 | window.windmill===void 39 | 0&&(window.windmill={}),window.windmill.My_Component=o,i.customComponent=o,Object.defineProperty(i,Symbol.toStringTag,{value:"Module"}),i}({},React,ReactDOM); 40 | resource_type: app_custom 41 | -------------------------------------------------------------------------------- /f/app_custom/folder.meta.yaml: -------------------------------------------------------------------------------- 1 | display_name: App Custom Components 2 | extra_perms: 3 | g/all: false 4 | owners: [] 5 | -------------------------------------------------------------------------------- /f/app_groups/folder.meta.yaml: -------------------------------------------------------------------------------- 1 | display_name: App Groups 2 | extra_perms: 3 | g/all: false 4 | owners: [] 5 | -------------------------------------------------------------------------------- /f/app_groups/group_1.resource.yaml: -------------------------------------------------------------------------------- 1 | description: null 2 | value: 3 | name: wewew 4 | value: 5 | item: 6 | '12': 7 | fixed: false 8 | h: 8 9 | w: 6 10 | x: 6 11 | y: 8 12 | '3': 13 | fixed: false 14 | h: 8 15 | w: 2 16 | x: 0 17 | y: 8 18 | id: c 19 | data: 20 | id: c 21 | type: containercomponent 22 | configuration: {} 23 | customCss: 24 | container: 25 | class: '' 26 | style: '' 27 | groupFields: {} 28 | numberOfSubgrids: 1 29 | subgrids: 30 | c-0: [] 31 | resource_type: app_group 32 | -------------------------------------------------------------------------------- /f/app_groups/group_2.resource.yaml: -------------------------------------------------------------------------------- 1 | description: null 2 | value: 3 | name: foooewwew 4 | value: 5 | item: 6 | '12': 7 | id: b 8 | fixed: false 9 | h: 8 10 | w: 6 11 | x: 6 12 | y: 0 13 | '3': 14 | fixed: false 15 | h: 8 16 | w: 2 17 | x: 1 18 | y: 0 19 | id: b 20 | data: 21 | id: b 22 | type: containercomponent 23 | configuration: {} 24 | customCss: 25 | container: 26 | class: '' 27 | style: '' 28 | groupFields: {} 29 | numberOfSubgrids: 1 30 | subgrids: 31 | b-0: 32 | - '12': 33 | fixed: false 34 | h: 10 35 | w: 6 36 | x: 0 37 | y: 0 38 | '3': 39 | fixed: false 40 | h: 10 41 | w: 3 42 | x: 0 43 | y: 0 44 | id: c 45 | data: 46 | id: c 47 | type: tablecomponent 48 | actionButtons: [] 49 | componentInput: 50 | type: static 51 | value: 52 | - id: 1 53 | name: A cell with a long name 54 | age: 42 55 | - id: 2 56 | name: A briefer cell 57 | age: 84 58 | fieldType: array 59 | subFieldType: object 60 | configuration: 61 | columnDefs: 62 | type: static 63 | value: 64 | - field: id 65 | - field: name 66 | - field: age 67 | downloadButton: 68 | type: static 69 | value: true 70 | initialState: 71 | type: static 72 | value: {} 73 | pagination: 74 | type: oneOf 75 | configuration: 76 | auto: 77 | pageSize: 78 | type: static 79 | value: 20 80 | manual: 81 | pageCount: 82 | type: static 83 | value: -1 84 | selected: auto 85 | search: 86 | type: static 87 | value: Disabled 88 | customCss: 89 | container: 90 | class: '' 91 | style: '' 92 | tableBody: 93 | class: '' 94 | style: '' 95 | tableFooter: 96 | class: '' 97 | style: '' 98 | tableHeader: 99 | class: '' 100 | style: '' 101 | resource_type: app_group 102 | -------------------------------------------------------------------------------- /f/app_themes/folder.meta.yaml: -------------------------------------------------------------------------------- 1 | display_name: App Themes 2 | extra_perms: 3 | g/all: false 4 | owners: [] 5 | -------------------------------------------------------------------------------- /f/app_themes/theme_0.resource.yaml: -------------------------------------------------------------------------------- 1 | description: The default app theme 2 | value: 3 | name: Default Theme 4 | value: '' 5 | resource_type: app_theme 6 | -------------------------------------------------------------------------------- /f/app_themes/theme_1.resource.yaml: -------------------------------------------------------------------------------- 1 | description: null 2 | value: 3 | name: wewe we w 4 | path: f/app_themes/theme_1 5 | resource_type: app_theme 6 | -------------------------------------------------------------------------------- /f/app_themes/theme_2.resource.yaml: -------------------------------------------------------------------------------- 1 | description: null 2 | value: 3 | name: erer 4 | value: '{}' 5 | resource_type: app_theme 6 | -------------------------------------------------------------------------------- /f/b/folder.meta.yaml: -------------------------------------------------------------------------------- 1 | display_name: b 2 | extra_perms: 3 | u/admin: true 4 | owners: 5 | - u/admin 6 | -------------------------------------------------------------------------------- /f/b/gorgeous_script.script.lock: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": {} 3 | } 4 | //bun.lockb 5 | -------------------------------------------------------------------------------- /f/b/gorgeous_script.script.yaml: -------------------------------------------------------------------------------- 1 | summary: '' 2 | description: '' 3 | lock: '!inline f/b/gorgeous_script.script.lock' 4 | kind: script 5 | schema: 6 | $schema: 'https://json-schema.org/draft/2020-12/schema' 7 | type: object 8 | properties: 9 | a: 10 | type: number 11 | description: '' 12 | default: null 13 | b: 14 | type: string 15 | description: '' 16 | default: null 17 | enum: 18 | - my 19 | - enum 20 | e: 21 | type: string 22 | description: '' 23 | default: inferred type string from default arg 24 | f: 25 | type: object 26 | description: '' 27 | default: 28 | nested: object 29 | properties: 30 | nested: 31 | type: string 32 | required: 33 | - a 34 | - b 35 | -------------------------------------------------------------------------------- /f/b/gorgeous_script.ts: -------------------------------------------------------------------------------- 1 | // import { toWords } from "number-to-words@1" 2 | import * as wmill from "windmill-client" 3 | 4 | // fill the type, or use the +Resource type to get a type-safe reference to a resource 5 | // type Postgresql = object 6 | fooo 7 | export async function main( 8 | a: number, 9 | b: "my" | "enum", 10 | //c: Postgresql, 11 | //d: wmill.S3Object, // for large files backed by S3 (https://www.windmill.dev/docs/core_concepts/persistent_storage/large_data_files) 12 | e = "inferred type string from default arg", 13 | f = { nested: "object" }, 14 | ) { 15 | // let x = await wmill.getVariable('u/user/foo') 16 | return { foo: a }; 17 | } 18 | -------------------------------------------------------------------------------- /f/c/folder.meta.yaml: -------------------------------------------------------------------------------- 1 | display_name: c 2 | extra_perms: 3 | u/admin: true 4 | owners: 5 | - u/admin 6 | -------------------------------------------------------------------------------- /f/c/trusted_script.script.lock: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": {} 3 | } 4 | //bun.lockb 5 | -------------------------------------------------------------------------------- /f/c/trusted_script.script.yaml: -------------------------------------------------------------------------------- 1 | summary: '' 2 | description: '' 3 | lock: '!inline f/c/trusted_script.script.lock' 4 | kind: script 5 | schema: 6 | $schema: 'https://json-schema.org/draft/2020-12/schema' 7 | type: object 8 | properties: 9 | a: 10 | type: number 11 | description: '' 12 | default: null 13 | b: 14 | type: string 15 | description: '' 16 | default: null 17 | enum: 18 | - my 19 | - enum 20 | e: 21 | type: string 22 | description: '' 23 | default: inferred type string from default arg 24 | f: 25 | type: object 26 | description: '' 27 | default: 28 | nested: object 29 | properties: 30 | nested: 31 | type: string 32 | required: 33 | - a 34 | - b 35 | -------------------------------------------------------------------------------- /f/c/trusted_script.ts: -------------------------------------------------------------------------------- 1 | // import { toWords } from "number-to-words@1" 2 | import * as wmill from "windmill-client" 3 | 4 | // fill the type, or use the +Resource type to get a type-safe reference to a resource 5 | // type Postgresql = object 6 | 7 | export async function main( 8 | a: number, 9 | b: "my" | "enum", 10 | //c: Postgresql, 11 | //d: wmill.S3Object, // for large files backed by S3 (https://www.windmill.dev/docs/core_concepts/persistent_storage/large_data_files) 12 | e = "inferred type string from default arg", 13 | f = { nested: "object" }, 14 | ) { 15 | // let x = await wmill.getVariable('u/user/foo') 16 | return { foo: a }; 17 | } 18 | -------------------------------------------------------------------------------- /f/d/booming_script.script.lock: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": {} 3 | } 4 | //bun.lockb 5 | -------------------------------------------------------------------------------- /f/d/booming_script.script.yaml: -------------------------------------------------------------------------------- 1 | summary: '' 2 | description: '' 3 | lock: '!inline f/d/booming_script.script.lock' 4 | kind: script 5 | schema: 6 | $schema: 'https://json-schema.org/draft/2020-12/schema' 7 | type: object 8 | properties: 9 | a: 10 | type: number 11 | description: '' 12 | default: null 13 | b: 14 | type: string 15 | description: '' 16 | default: null 17 | enum: 18 | - my 19 | - enum 20 | e: 21 | type: string 22 | description: '' 23 | default: inferred type string from default arg 24 | f: 25 | type: object 26 | description: '' 27 | default: 28 | nested: object 29 | properties: 30 | nested: 31 | type: string 32 | required: 33 | - a 34 | - b 35 | -------------------------------------------------------------------------------- /f/d/booming_script.ts: -------------------------------------------------------------------------------- 1 | // import { toWords } from "number-to-words@1" 2 | import * as wmill from "windmill-client" 3 | 4 | // fill the type, or use the +Resource type to get a type-safe reference to a resource 5 | // type Postgresql = object 6 | 7 | export async function main( 8 | a: number, 9 | b: "my" | "enum", 10 | //c: Postgresql, 11 | //d: wmill.S3Object, // for large files backed by S3 (https://www.windmill.dev/docs/core_concepts/persistent_storage/large_data_files) 12 | e = "inferred type string from default arg", 13 | f = { nested: "object" }, 14 | ) { 15 | // let x = await wmill.getVariable('u/user/foo') 16 | return { foo: a }; 17 | } 18 | -------------------------------------------------------------------------------- /f/d/folder.meta.yaml: -------------------------------------------------------------------------------- 1 | display_name: d 2 | extra_perms: 3 | u/admin: true 4 | owners: 5 | - u/admin 6 | -------------------------------------------------------------------------------- /f/delivery/cleared_script.deno.ts: -------------------------------------------------------------------------------- 1 | // Ctrl/CMD+. to cache dependencies on imports hover. 2 | 3 | // Deno uses "npm:" prefix to import from npm (https://deno.land/manual@v1.36.3/node/npm_specifiers) 4 | // import * as wmill from "npm:windmill-client@1.269.0" 5 | 6 | // fill the type, or use the +Resource type to get a type-safe reference to a resource 7 | // type Postgresql = object 8 | 9 | export async function main( 10 | a: number, 11 | b: "my" | "enum", 12 | //c: Postgresql, 13 | d = "inferred type string from default arg", 14 | e = { nested: "object" }, 15 | //e: wmill.Base64 16 | ) { 17 | 18 | 19 | 20 | 21 | // let x = await wmill.getVariable('u/user/foo') 22 | return { foo: a }; 23 | } 24 | -------------------------------------------------------------------------------- /f/delivery/cleared_script.script.lock: -------------------------------------------------------------------------------- 1 | { 2 | "version": "3", 3 | "remote": {} 4 | } 5 | -------------------------------------------------------------------------------- /f/delivery/cleared_script.script.yaml: -------------------------------------------------------------------------------- 1 | summary: '' 2 | description: '' 3 | lock: '!inline f/delivery/cleared_script.script.lock' 4 | kind: script 5 | schema: 6 | $schema: 'https://json-schema.org/draft/2020-12/schema' 7 | type: object 8 | properties: 9 | a: 10 | type: number 11 | description: '' 12 | default: null 13 | b: 14 | type: string 15 | description: '' 16 | default: null 17 | enum: 18 | - my 19 | - enum 20 | originalType: enum 21 | d: 22 | type: string 23 | description: '' 24 | default: inferred type string from default arg 25 | originalType: string 26 | e: 27 | type: object 28 | description: '' 29 | default: 30 | nested: object 31 | properties: 32 | nested: 33 | type: string 34 | originalType: string 35 | required: 36 | - a 37 | - b 38 | -------------------------------------------------------------------------------- /f/delivery/folder.meta.yaml: -------------------------------------------------------------------------------- 1 | summary: null 2 | display_name: delivery 3 | extra_perms: 4 | u/admin: true 5 | owners: 6 | - u/admin 7 | -------------------------------------------------------------------------------- /f/e/cheaper_script.script.lock: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": {} 3 | } 4 | //bun.lockb 5 | -------------------------------------------------------------------------------- /f/e/cheaper_script.script.yaml: -------------------------------------------------------------------------------- 1 | summary: '' 2 | description: '' 3 | lock: '!inline f/e/cheaper_script.script.lock' 4 | kind: script 5 | schema: 6 | $schema: 'https://json-schema.org/draft/2020-12/schema' 7 | type: object 8 | properties: 9 | a: 10 | type: number 11 | description: '' 12 | default: null 13 | b: 14 | type: string 15 | description: '' 16 | default: null 17 | enum: 18 | - my 19 | - enum 20 | e: 21 | type: string 22 | description: '' 23 | default: inferred type string from default arg 24 | f: 25 | type: object 26 | description: '' 27 | default: 28 | nested: object 29 | properties: 30 | nested: 31 | type: string 32 | required: 33 | - a 34 | - b 35 | -------------------------------------------------------------------------------- /f/e/cheaper_script.ts: -------------------------------------------------------------------------------- 1 | // import { toWords } from "number-to-words@1" 2 | import * as wmill from "windmill-client" 3 | 4 | // fill the type, or use the +Resource type to get a type-safe reference to a resource 5 | // type Postgresql = object 6 | 7 | export async function main( 8 | a: number, 9 | b: "my" | "enum", 10 | //c: Postgresql, 11 | //d: wmill.S3Object, // for large files backed by S3 (https://www.windmill.dev/docs/core_concepts/persistent_storage/large_data_files) 12 | e = "inferred type string from default arg", 13 | f = { nested: "object" }, 14 | ) { 15 | // let x = await wmill.getVariable('u/user/foo') 16 | return { foo: a }; 17 | } 18 | -------------------------------------------------------------------------------- /f/e/folder.meta.yaml: -------------------------------------------------------------------------------- 1 | display_name: e 2 | extra_perms: 3 | u/admin: true 4 | owners: 5 | - u/admin 6 | -------------------------------------------------------------------------------- /f/examples/efficient_script.deno.ts: -------------------------------------------------------------------------------- 1 | export async function main( 2 | a: number, 3 | b: "my" | "enum", 4 | //c: Postgresql, 5 | d = "inferred type string from default arg", 6 | e = { nested: "object" } 7 | //e: wmill.Base64 8 | ) { 9 | "fooooooo"; 10 | // let x = await wmill.getVariable('u/user/foo') 11 | return { foo: a }; 12 | } 13 | -------------------------------------------------------------------------------- /f/examples/efficient_script.script.lock: -------------------------------------------------------------------------------- 1 | { 2 | "version": "3", 3 | "remote": {} 4 | } 5 | -------------------------------------------------------------------------------- /f/examples/efficient_script.script.yaml: -------------------------------------------------------------------------------- 1 | summary: '' 2 | description: '' 3 | lock: '!inline f/examples/efficient_script.script.lock' 4 | kind: script 5 | schema: 6 | $schema: 'https://json-schema.org/draft/2020-12/schema' 7 | type: object 8 | properties: 9 | a: 10 | type: number 11 | description: '' 12 | default: null 13 | b: 14 | type: string 15 | description: '' 16 | default: null 17 | enum: 18 | - my 19 | - enum 20 | d: 21 | type: string 22 | description: '' 23 | default: inferred type string from default arg 24 | e: 25 | type: object 26 | description: '' 27 | default: 28 | nested: object 29 | properties: 30 | nested: 31 | type: string 32 | required: 33 | - a 34 | - b 35 | -------------------------------------------------------------------------------- /f/examples/folder.meta.yaml: -------------------------------------------------------------------------------- 1 | display_name: examples 2 | extra_perms: 3 | g/fooo: false 4 | u/admin: true 5 | owners: 6 | - u/admin 7 | -------------------------------------------------------------------------------- /f/examples/product_dashboard.app/all_product_data.inline_script.lock: -------------------------------------------------------------------------------- 1 | { 2 | "version": "3", 3 | "remote": {} 4 | } 5 | -------------------------------------------------------------------------------- /f/examples/product_dashboard.app/all_product_data.inline_script.ts: -------------------------------------------------------------------------------- 1 | export async function main() { 2 | const res = await fetch('https://dummyjson.com/products') 3 | const json = await res.json() 4 | return json.products.map((p: Record) => { 5 | delete p.images 6 | delete p.thumbnail 7 | delete p.description 8 | return p 9 | }) 10 | } 11 | -------------------------------------------------------------------------------- /f/examples/product_dashboard.app/app.yaml: -------------------------------------------------------------------------------- 1 | summary: Product Dashboard 2 | value: 3 | fullscreen: false 4 | grid: 5 | - '12': 6 | id: a 7 | customDragger: false 8 | customResizer: false 9 | draggable: true 10 | fixed: false 11 | h: 15 12 | max: 13 | h: 100 14 | w: 12 15 | min: 16 | h: 1 17 | w: 1 18 | resizable: true 19 | w: 8 20 | x: 0 21 | y: 2 22 | '3': 23 | id: a 24 | customDragger: false 25 | customResizer: false 26 | draggable: true 27 | fixed: false 28 | h: 10 29 | max: 30 | h: 100 31 | w: 3 32 | min: 33 | h: 1 34 | w: 1 35 | resizable: true 36 | w: 3 37 | x: 0 38 | y: 1 39 | id: a 40 | data: 41 | id: a 42 | type: tablecomponent 43 | actionButtons: [] 44 | card: true 45 | componentInput: 46 | type: runnable 47 | value: 48 | - id: 1 49 | brand: Apple 50 | category: smartphones 51 | discountPercentage: 12.96 52 | price: 549 53 | rating: 4.69 54 | stock: 94 55 | title: iPhone 9 56 | - id: 2 57 | brand: Apple 58 | category: smartphones 59 | discountPercentage: 17.94 60 | price: 899 61 | rating: 4.44 62 | stock: 34 63 | title: iPhone X 64 | - id: 3 65 | brand: Samsung 66 | category: smartphones 67 | discountPercentage: 15.46 68 | price: 1249 69 | rating: 4.09 70 | stock: 36 71 | title: Samsung Universe 9 72 | - id: 4 73 | brand: OPPO 74 | category: smartphones 75 | discountPercentage: 17.91 76 | price: 280 77 | rating: 4.3 78 | stock: 123 79 | title: OPPOF19 80 | - id: 5 81 | brand: Huawei 82 | category: smartphones 83 | discountPercentage: 10.58 84 | price: 499 85 | rating: 4.09 86 | stock: 32 87 | title: Huawei P30 88 | - id: 6 89 | brand: APPle 90 | category: laptops 91 | discountPercentage: 11.02 92 | price: 1749 93 | rating: 4.57 94 | stock: 83 95 | title: MacBook Pro 96 | - id: 7 97 | brand: Samsung 98 | category: laptops 99 | discountPercentage: 4.15 100 | price: 1499 101 | rating: 4.25 102 | stock: 50 103 | title: Samsung Galaxy Book 104 | - id: 8 105 | brand: Microsoft Surface 106 | category: laptops 107 | discountPercentage: 10.23 108 | price: 1499 109 | rating: 4.43 110 | stock: 68 111 | title: Microsoft Surface Laptop 4 112 | - id: 9 113 | brand: Infinix 114 | category: laptops 115 | discountPercentage: 11.83 116 | price: 1099 117 | rating: 4.54 118 | stock: 96 119 | title: Infinix INBOOK 120 | - id: 10 121 | brand: HP Pavilion 122 | category: laptops 123 | discountPercentage: 6.18 124 | price: 1099 125 | rating: 4.43 126 | stock: 89 127 | title: HP Pavilion 15-DK1056WM 128 | - id: 11 129 | brand: Impression of Acqua Di Gio 130 | category: fragrances 131 | discountPercentage: 8.4 132 | price: 13 133 | rating: 4.26 134 | stock: 65 135 | title: perfume Oil 136 | - id: 12 137 | brand: Royal_Mirage 138 | category: fragrances 139 | discountPercentage: 15.66 140 | price: 40 141 | rating: 4 142 | stock: 52 143 | title: Brown Perfume 144 | - id: 13 145 | brand: Fog Scent Xpressio 146 | category: fragrances 147 | discountPercentage: 8.14 148 | price: 13 149 | rating: 4.59 150 | stock: 61 151 | title: Fog Scent Xpressio Perfume 152 | - id: 14 153 | brand: Al Munakh 154 | category: fragrances 155 | discountPercentage: 15.6 156 | price: 120 157 | rating: 4.21 158 | stock: 114 159 | title: Non-Alcoholic Concentrated Perfume Oil 160 | - id: 15 161 | brand: Lord - Al-Rehab 162 | category: fragrances 163 | discountPercentage: 10.99 164 | price: 30 165 | rating: 4.7 166 | stock: 105 167 | title: Eau De Perfume Spray 168 | - id: 16 169 | brand: L'Oreal Paris 170 | category: skincare 171 | discountPercentage: 13.31 172 | price: 19 173 | rating: 4.83 174 | stock: 110 175 | title: Hyaluronic Acid Serum 176 | - id: 17 177 | brand: Hemani Tea 178 | category: skincare 179 | discountPercentage: 4.09 180 | price: 12 181 | rating: 4.52 182 | stock: 78 183 | title: Tree Oil 30ml 184 | - id: 18 185 | brand: Dermive 186 | category: skincare 187 | discountPercentage: 13.1 188 | price: 40 189 | rating: 4.56 190 | stock: 88 191 | title: Oil Free Moisturizer 100ml 192 | - id: 19 193 | brand: ROREC White Rice 194 | category: skincare 195 | discountPercentage: 10.68 196 | price: 46 197 | rating: 4.42 198 | stock: 54 199 | title: Skin Beauty Serum. 200 | - id: 20 201 | brand: Fair & Clear 202 | category: skincare 203 | discountPercentage: 16.99 204 | price: 70 205 | rating: 4.06 206 | stock: 140 207 | title: Freckle Treatment Cream- 15gm 208 | - id: 21 209 | brand: Saaf & Khaas 210 | category: groceries 211 | discountPercentage: 4.81 212 | price: 20 213 | rating: 4.44 214 | stock: 133 215 | title: '- Daal Masoor 500 grams' 216 | - id: 22 217 | brand: Bake Parlor Big 218 | category: groceries 219 | discountPercentage: 15.58 220 | price: 14 221 | rating: 4.57 222 | stock: 146 223 | title: Elbow Macaroni - 400 gm 224 | - id: 23 225 | brand: Baking Food Items 226 | category: groceries 227 | discountPercentage: 8.04 228 | price: 14 229 | rating: 4.85 230 | stock: 26 231 | title: Orange Essence Food Flavou 232 | - id: 24 233 | brand: fauji 234 | category: groceries 235 | discountPercentage: 16.8 236 | price: 46 237 | rating: 4.94 238 | stock: 113 239 | title: cereals muesli fruit nuts 240 | - id: 25 241 | brand: Dry Rose 242 | category: groceries 243 | discountPercentage: 13.58 244 | price: 70 245 | rating: 4.87 246 | stock: 47 247 | title: Gulab Powder 50 Gram 248 | - id: 26 249 | brand: Boho Decor 250 | category: home-decoration 251 | discountPercentage: 17.86 252 | price: 41 253 | rating: 4.08 254 | stock: 131 255 | title: Plant Hanger For Home 256 | - id: 27 257 | brand: Flying Wooden 258 | category: home-decoration 259 | discountPercentage: 15.58 260 | price: 51 261 | rating: 4.41 262 | stock: 17 263 | title: Flying Wooden Bird 264 | - id: 28 265 | brand: LED Lights 266 | category: home-decoration 267 | discountPercentage: 16.49 268 | price: 20 269 | rating: 4.82 270 | stock: 54 271 | title: 3D Embellishment Art Lamp 272 | - id: 29 273 | brand: luxury palace 274 | category: home-decoration 275 | discountPercentage: 15.34 276 | price: 60 277 | rating: 4.44 278 | stock: 7 279 | title: Handcraft Chinese style 280 | - id: 30 281 | brand: Golden 282 | category: home-decoration 283 | discountPercentage: 2.92 284 | price: 30 285 | rating: 4.92 286 | stock: 54 287 | title: Key Holder 288 | connection: 289 | componentId: c 290 | path: result 291 | fields: {} 292 | fieldType: array 293 | runnable: 294 | type: runnableByName 295 | name: All Product Data 296 | inlineScript: 297 | content: '!inline all_product_data.inline_script.ts' 298 | lock: '!inline all_product_data.inline_script.lock' 299 | language: deno 300 | path: /inline-script/Inline Script 2 301 | schema: 302 | $schema: 'https://json-schema.org/draft/2020-12/schema' 303 | type: object 304 | properties: {} 305 | required: [] 306 | subFieldType: object 307 | configuration: 308 | search: 309 | type: static 310 | value: Disabled 311 | fieldType: select 312 | onlyStatic: true 313 | optionValuesKey: tableSearchOptions 314 | - '12': 315 | id: b 316 | customDragger: false 317 | customResizer: false 318 | draggable: true 319 | fixed: false 320 | h: 2 321 | max: 322 | h: 100 323 | w: 12 324 | min: 325 | h: 1 326 | w: 1 327 | resizable: true 328 | w: 12 329 | x: 0 330 | y: 0 331 | '3': 332 | id: b 333 | customDragger: false 334 | customResizer: false 335 | draggable: true 336 | fixed: false 337 | h: 1 338 | max: 339 | h: 100 340 | w: 3 341 | min: 342 | h: 1 343 | w: 1 344 | resizable: true 345 | w: 3 346 | x: 0 347 | y: 0 348 | id: b 349 | data: 350 | id: b 351 | type: textcomponent 352 | card: false 353 | componentInput: 354 | type: template 355 | value: 'Hello ${ctx.username}' 356 | eval: Product table 357 | fieldType: template 358 | configuration: 359 | extraStyle: 360 | type: static 361 | value: 'padding-left:10px;' 362 | fieldType: text 363 | style: 364 | type: static 365 | value: Title 366 | fieldType: select 367 | onlyStatic: true 368 | optionValuesKey: textStyleOptions 369 | horizontalAlignment: left 370 | softWrap: true 371 | verticalAlignment: center 372 | - '12': 373 | id: d 374 | customDragger: false 375 | customResizer: false 376 | draggable: true 377 | fixed: false 378 | h: 15 379 | max: 380 | h: 100 381 | w: 12 382 | min: 383 | h: 1 384 | w: 1 385 | resizable: true 386 | w: 4 387 | x: 8 388 | y: 2 389 | '3': 390 | id: d 391 | customDragger: false 392 | customResizer: false 393 | draggable: true 394 | fixed: false 395 | h: 12 396 | max: 397 | h: 100 398 | w: 3 399 | min: 400 | h: 1 401 | w: 1 402 | resizable: true 403 | w: 3 404 | x: 0 405 | y: 11 406 | id: d 407 | data: 408 | id: d 409 | type: htmlcomponent 410 | card: false 411 | componentInput: 412 | type: runnable 413 | value: |2- 414 | 415 |

416 | Select a row from the table 417 |

418 | 419 | eval: "\n
\n\tHello ${ctx.username}\n
\t\t\t\n" 420 | fields: 421 | id: 422 | type: connected 423 | value: null 424 | connection: 425 | componentId: a 426 | path: selectedRow.id 427 | fieldType: number 428 | visible: true 429 | fieldType: template 430 | runnable: 431 | type: runnableByName 432 | name: One Product Detail 433 | inlineScript: 434 | content: '!inline one_product_detail.inline_script.ts' 435 | lock: '!inline one_product_detail.inline_script.lock' 436 | language: deno 437 | path: /inline-script/Inline Script 0 438 | schema: 439 | $schema: 'https://json-schema.org/draft/2020-12/schema' 440 | type: object 441 | properties: 442 | id: 443 | type: number 444 | description: '' 445 | default: null 446 | required: 447 | - id 448 | configuration: {} 449 | softWrap: false 450 | - '12': 451 | id: e 452 | customDragger: false 453 | customResizer: false 454 | draggable: true 455 | fixed: false 456 | h: 8 457 | max: 458 | h: 100 459 | w: 12 460 | min: 461 | h: 1 462 | w: 1 463 | resizable: true 464 | w: 6 465 | x: 0 466 | y: 19 467 | '3': 468 | customDragger: false 469 | customResizer: false 470 | draggable: true 471 | fixed: false 472 | h: 8 473 | max: 474 | h: 100 475 | w: 3 476 | min: 477 | h: 1 478 | w: 1 479 | resizable: true 480 | w: 2 481 | x: 0 482 | y: 23 483 | id: e 484 | data: 485 | id: e 486 | type: barchartcomponent 487 | card: true 488 | componentInput: 489 | type: runnable 490 | value: 491 | data: 492 | - 5 493 | - 5 494 | - 5 495 | - 5 496 | - 5 497 | - 5 498 | labels: 499 | - smartphones 500 | - laptops 501 | - fragrances 502 | - skincare 503 | - groceries 504 | - home-decoration 505 | fields: 506 | data: 507 | type: connected 508 | value: null 509 | connection: 510 | componentId: a 511 | path: result 512 | fieldType: array 513 | fieldType: object 514 | runnable: 515 | type: runnableByName 516 | name: Product Category Count 517 | inlineScript: 518 | content: '!inline product_category_count.inline_script.ts' 519 | lock: '!inline product_category_count.inline_script.lock' 520 | language: deno 521 | path: u/adam/products-app/inline-script/Inline Script 0 522 | schema: 523 | $schema: 'https://json-schema.org/draft/2020-12/schema' 524 | type: object 525 | properties: 526 | data: 527 | type: array 528 | description: '' 529 | default: null 530 | items: 531 | type: string 532 | properties: 533 | category: 534 | type: string 535 | description: '' 536 | required: 537 | - data 538 | configuration: 539 | line: 540 | type: static 541 | value: false 542 | fieldType: boolean 543 | onlyStatic: true 544 | theme: 545 | type: static 546 | value: theme1 547 | fieldType: select 548 | onlyStatic: true 549 | optionValuesKey: chartThemeOptions 550 | - '12': 551 | id: f 552 | customDragger: false 553 | customResizer: false 554 | draggable: true 555 | fixed: false 556 | h: 9 557 | max: 558 | h: 100 559 | w: 12 560 | min: 561 | h: 1 562 | w: 1 563 | resizable: true 564 | w: 6 565 | x: 6 566 | y: 19 567 | '3': 568 | customDragger: false 569 | customResizer: false 570 | draggable: true 571 | fixed: false 572 | h: 8 573 | max: 574 | h: 100 575 | w: 3 576 | min: 577 | h: 1 578 | w: 1 579 | resizable: true 580 | w: 2 581 | x: 0 582 | y: 31 583 | id: f 584 | data: 585 | id: f 586 | type: barchartcomponent 587 | card: true 588 | componentInput: 589 | type: runnable 590 | value: 591 | data: 592 | - 3 593 | - 2 594 | - 1 595 | - 1 596 | - 1 597 | - 1 598 | - 1 599 | - 1 600 | - 1 601 | - 1 602 | - 1 603 | - 1 604 | - 1 605 | - 1 606 | - 1 607 | - 1 608 | - 1 609 | - 1 610 | - 1 611 | - 1 612 | - 1 613 | - 1 614 | - 1 615 | - 1 616 | - 1 617 | - 1 618 | - 1 619 | labels: 620 | - apple 621 | - samsung 622 | - oppo 623 | - huawei 624 | - microsoft surface 625 | - infinix 626 | - hp pavilion 627 | - impression of acqua di gio 628 | - royal_mirage 629 | - fog scent xpressio 630 | - al munakh 631 | - lord - al-rehab 632 | - l'oreal paris 633 | - hemani tea 634 | - dermive 635 | - rorec white rice 636 | - fair & clear 637 | - saaf & khaas 638 | - bake parlor big 639 | - baking food items 640 | - fauji 641 | - dry rose 642 | - boho decor 643 | - flying wooden 644 | - led lights 645 | - luxury palace 646 | - golden 647 | fields: 648 | data: 649 | type: connected 650 | value: null 651 | connection: 652 | componentId: a 653 | path: result 654 | fieldType: array 655 | fieldType: object 656 | runnable: 657 | type: runnableByName 658 | name: Product Brand Count 659 | inlineScript: 660 | content: '!inline product_brand_count.inline_script.ts' 661 | lock: '!inline product_brand_count.inline_script.lock' 662 | language: deno 663 | path: u/adam/products-app/inline-script/Inline Script 0 664 | schema: 665 | $schema: 'https://json-schema.org/draft/2020-12/schema' 666 | type: object 667 | properties: 668 | data: 669 | type: array 670 | description: '' 671 | default: null 672 | items: 673 | type: string 674 | required: 675 | - data 676 | configuration: 677 | line: 678 | type: static 679 | value: false 680 | fieldType: boolean 681 | onlyStatic: true 682 | theme: 683 | type: static 684 | value: theme1 685 | fieldType: select 686 | onlyStatic: true 687 | optionValuesKey: chartThemeOptions 688 | - '12': 689 | id: h 690 | customDragger: false 691 | customResizer: false 692 | draggable: true 693 | fixed: false 694 | h: 2 695 | max: 696 | h: 100 697 | w: 12 698 | min: 699 | h: 1 700 | w: 1 701 | resizable: true 702 | w: 6 703 | x: 0 704 | y: 17 705 | '3': 706 | customDragger: false 707 | customResizer: false 708 | draggable: true 709 | fixed: false 710 | h: 1 711 | max: 712 | h: 100 713 | w: 3 714 | min: 715 | h: 1 716 | w: 1 717 | resizable: true 718 | w: 1 719 | x: 2 720 | y: 23 721 | id: h 722 | data: 723 | id: h 724 | type: textcomponent 725 | card: false 726 | componentInput: 727 | type: template 728 | value: 'Hello ${ctx.username}' 729 | eval: Product Count By Categories 730 | fieldType: template 731 | configuration: 732 | copyButton: 733 | type: static 734 | value: false 735 | fieldType: boolean 736 | onlyStatic: true 737 | extraStyle: 738 | type: static 739 | value: '' 740 | fieldType: text 741 | tooltip: 'CSS rules like "color: blue;"' 742 | style: 743 | type: static 744 | value: Subtitle 745 | fieldType: select 746 | onlyStatic: true 747 | optionValuesKey: textStyleOptions 748 | horizontalAlignment: left 749 | softWrap: true 750 | verticalAlignment: bottom 751 | - '12': 752 | id: i 753 | customDragger: false 754 | customResizer: false 755 | draggable: true 756 | fixed: false 757 | h: 2 758 | max: 759 | h: 100 760 | w: 12 761 | min: 762 | h: 1 763 | w: 1 764 | resizable: true 765 | w: 6 766 | x: 6 767 | y: 17 768 | '3': 769 | customDragger: false 770 | customResizer: false 771 | draggable: true 772 | fixed: false 773 | h: 1 774 | max: 775 | h: 100 776 | w: 3 777 | min: 778 | h: 1 779 | w: 1 780 | resizable: true 781 | w: 1 782 | x: 2 783 | y: 24 784 | id: i 785 | data: 786 | id: i 787 | type: textcomponent 788 | card: false 789 | componentInput: 790 | type: template 791 | value: 'Hello ${ctx.username}' 792 | eval: Product Count By Brands 793 | fieldType: template 794 | configuration: 795 | copyButton: 796 | type: static 797 | value: false 798 | fieldType: boolean 799 | onlyStatic: true 800 | extraStyle: 801 | type: static 802 | value: '' 803 | fieldType: text 804 | tooltip: 'CSS rules like "color: blue;"' 805 | style: 806 | type: static 807 | value: Subtitle 808 | fieldType: select 809 | onlyStatic: true 810 | optionValuesKey: textStyleOptions 811 | horizontalAlignment: left 812 | softWrap: true 813 | verticalAlignment: bottom 814 | - '12': 815 | id: j 816 | customDragger: false 817 | customResizer: false 818 | draggable: true 819 | fixed: false 820 | h: 2 821 | max: 822 | h: 100 823 | w: 12 824 | min: 825 | h: 1 826 | w: 1 827 | resizable: true 828 | w: 12 829 | x: 0 830 | y: 28 831 | '3': 832 | customDragger: false 833 | customResizer: false 834 | draggable: true 835 | fixed: false 836 | h: 1 837 | max: 838 | h: 100 839 | w: 3 840 | min: 841 | h: 1 842 | w: 1 843 | resizable: true 844 | w: 1 845 | x: 2 846 | y: 25 847 | id: j 848 | data: 849 | id: j 850 | type: textcomponent 851 | card: false 852 | componentInput: 853 | type: runnable 854 | value: 'Stock Worth By Product (Total Worth: $765,200)' 855 | eval: Stock Worth By Product 856 | fields: 857 | data: 858 | type: connected 859 | value: null 860 | connection: 861 | componentId: a 862 | path: result 863 | fieldType: array 864 | fieldType: template 865 | runnable: 866 | type: runnableByName 867 | name: Stock Worth Title 868 | inlineScript: 869 | content: '!inline stock_worth_title.inline_script.ts' 870 | lock: '!inline stock_worth_title.inline_script.lock' 871 | language: deno 872 | path: u/adam/products-app/inline-script/Inline Script 0 873 | schema: 874 | $schema: 'https://json-schema.org/draft/2020-12/schema' 875 | type: object 876 | properties: 877 | data: 878 | type: array 879 | description: '' 880 | default: null 881 | items: 882 | type: string 883 | required: 884 | - data 885 | configuration: 886 | copyButton: 887 | type: static 888 | value: false 889 | fieldType: boolean 890 | onlyStatic: true 891 | extraStyle: 892 | type: static 893 | value: '' 894 | fieldType: text 895 | tooltip: 'CSS rules like "color: blue;"' 896 | style: 897 | type: static 898 | value: Subtitle 899 | fieldType: select 900 | onlyStatic: true 901 | optionValuesKey: textStyleOptions 902 | horizontalAlignment: left 903 | softWrap: true 904 | verticalAlignment: bottom 905 | - '12': 906 | id: k 907 | customDragger: false 908 | customResizer: false 909 | draggable: true 910 | fixed: false 911 | h: 16 912 | max: 913 | h: 100 914 | w: 12 915 | min: 916 | h: 1 917 | w: 1 918 | resizable: true 919 | w: 12 920 | x: 0 921 | y: 30 922 | '3': 923 | customDragger: false 924 | customResizer: false 925 | draggable: true 926 | fixed: false 927 | h: 8 928 | max: 929 | h: 100 930 | w: 3 931 | min: 932 | h: 1 933 | w: 1 934 | resizable: true 935 | w: 2 936 | x: 0 937 | y: 47 938 | id: k 939 | data: 940 | id: k 941 | type: barchartcomponent 942 | card: true 943 | componentInput: 944 | type: runnable 945 | value: 946 | data: 947 | - 51606 948 | - 30566 949 | - 44964 950 | - 34440 951 | - 15968 952 | - 145167 953 | - 74950 954 | - 101932 955 | - 105504 956 | - 97811 957 | - 845 958 | - 2080 959 | - 793 960 | - 13680 961 | - 3150 962 | - 2090 963 | - 936 964 | - 3520 965 | - 2484 966 | - 9800 967 | - 2660 968 | - 2044 969 | - 364 970 | - 5198 971 | - 3290 972 | - 5371 973 | - 867 974 | - 1080 975 | - 420 976 | - 1620 977 | labels: 978 | - Apple iPhone 9 979 | - Apple iPhone X 980 | - Samsung Samsung Universe 9 981 | - OPPO OPPOF19 982 | - Huawei Huawei P30 983 | - APPle MacBook Pro 984 | - Samsung Samsung Galaxy Book 985 | - Microsoft Surface Microsoft Surface Laptop 4 986 | - Infinix Infinix INBOOK 987 | - HP Pavilion HP Pavilion 15-DK1056WM 988 | - Impression of Acqua Di Gio perfume Oil 989 | - Royal_Mirage Brown Perfume 990 | - Fog Scent Xpressio Fog Scent Xpressio Perfume 991 | - Al Munakh Non-Alcoholic Concentrated Perfume Oil 992 | - Lord - Al-Rehab Eau De Perfume Spray 993 | - L'Oreal Paris Hyaluronic Acid Serum 994 | - Hemani Tea Tree Oil 30ml 995 | - Dermive Oil Free Moisturizer 100ml 996 | - ROREC White Rice Skin Beauty Serum. 997 | - Fair & Clear Freckle Treatment Cream- 15gm 998 | - Saaf & Khaas - Daal Masoor 500 grams 999 | - Bake Parlor Big Elbow Macaroni - 400 gm 1000 | - Baking Food Items Orange Essence Food Flavou 1001 | - fauji cereals muesli fruit nuts 1002 | - Dry Rose Gulab Powder 50 Gram 1003 | - Boho Decor Plant Hanger For Home 1004 | - Flying Wooden Flying Wooden Bird 1005 | - LED Lights 3D Embellishment Art Lamp 1006 | - luxury palace Handcraft Chinese style 1007 | - Golden Key Holder 1008 | fields: 1009 | data: 1010 | type: connected 1011 | value: null 1012 | connection: 1013 | componentId: a 1014 | path: result 1015 | fieldType: array 1016 | fieldType: object 1017 | runnable: 1018 | type: runnableByName 1019 | name: Product Stock Total Worth 1020 | inlineScript: 1021 | content: '!inline product_stock_total_worth.inline_script.ts' 1022 | lock: '!inline product_stock_total_worth.inline_script.lock' 1023 | language: deno 1024 | path: u/adam/products-app/inline-script/Inline Script 0 1025 | schema: 1026 | $schema: 'https://json-schema.org/draft/2020-12/schema' 1027 | type: object 1028 | properties: 1029 | data: 1030 | type: array 1031 | description: '' 1032 | default: null 1033 | items: 1034 | type: string 1035 | required: 1036 | - data 1037 | configuration: 1038 | line: 1039 | type: static 1040 | value: false 1041 | fieldType: boolean 1042 | onlyStatic: true 1043 | theme: 1044 | type: static 1045 | value: theme1 1046 | fieldType: select 1047 | onlyStatic: true 1048 | optionValuesKey: chartThemeOptions 1049 | hiddenInlineScripts: [] 1050 | subgrids: {} 1051 | unusedInlineScripts: [] 1052 | policy: 1053 | execution_mode: publisher 1054 | triggerables: 1055 | rawscript/0b7c4f9a401d090cc96b25069f8cb3846fed012f68437856425adcc7ff23ae9b: {} 1056 | rawscript/0ce94e9ebe918bee2c0942577d8acc74d9f81e2cad7c380a6098325d468990de: {} 1057 | rawscript/45cf98f74c1ecaf42702a6ca153a08af48d7b947ba162c25f37e4dcd269970e4: {} 1058 | rawscript/5bc9c6ea570729546e338f1470382df7ab8f7e5bd90cb49600cddb4d2f2fa858: {} 1059 | rawscript/d72ff89755c81acdf8f0f7ade4b1d497094ae9a222660ba7fe8cabb32b497906: {} 1060 | rawscript/f19ca57f66dbe82b11d6b00a3b1ae7fe31e1c608e18bfd338aea9123e29834e3: {} 1061 | -------------------------------------------------------------------------------- /f/examples/product_dashboard.app/one_product_detail.inline_script.lock: -------------------------------------------------------------------------------- 1 | { 2 | "version": "3", 3 | "remote": {} 4 | } 5 | -------------------------------------------------------------------------------- /f/examples/product_dashboard.app/one_product_detail.inline_script.ts: -------------------------------------------------------------------------------- 1 | export async function main(id: number) { 2 | if (!id) { 3 | return ` 4 |

5 | Select a row from the tablee 6 |

7 | `; 8 | } 9 | const res = await fetch("https://dummyjson.com/products/" + id); 10 | const { brand, title, thumbnail, description } = await res.json(); 11 | return ` 12 | 13 |

14 | ${brand} ${title} 15 |

16 |

17 | ${description} 18 |

19 | `; 20 | } 21 | -------------------------------------------------------------------------------- /f/examples/product_dashboard.app/product_brand_count.inline_script.lock: -------------------------------------------------------------------------------- 1 | { 2 | "version": "3", 3 | "remote": {} 4 | } 5 | -------------------------------------------------------------------------------- /f/examples/product_dashboard.app/product_brand_count.inline_script.ts: -------------------------------------------------------------------------------- 1 | export async function main(data: {brand: string}[]) { 2 | const result: {data: number[], labels: string[]} = { 3 | data: [], 4 | labels: [] 5 | } 6 | if(!Array.isArray(data)) { return result } 7 | 8 | const count: Record = {} 9 | data.forEach(({brand}) => { 10 | brand = brand.toLowerCase() 11 | if(count[brand]) { 12 | count[brand]++ 13 | } else { 14 | count[brand] = 1 15 | } 16 | }) 17 | Object.entries(count).forEach(([key, value]) => { 18 | result.data.push(value) 19 | result.labels.push(key) 20 | }) 21 | return result 22 | } 23 | -------------------------------------------------------------------------------- /f/examples/product_dashboard.app/product_category_count.inline_script.lock: -------------------------------------------------------------------------------- 1 | { 2 | "version": "3", 3 | "remote": {} 4 | } 5 | -------------------------------------------------------------------------------- /f/examples/product_dashboard.app/product_category_count.inline_script.ts: -------------------------------------------------------------------------------- 1 | export async function main(data: {category: string}[]) { 2 | const result: {data: number[], labels: string[]} = { 3 | data: [], 4 | labels: [] 5 | } 6 | if(!Array.isArray(data)) { return result } 7 | 8 | const count: Record = {} 9 | data.forEach(({category}) => { 10 | if(count[category]) { 11 | count[category]++ 12 | } else { 13 | count[category] = 1 14 | } 15 | }) 16 | Object.entries(count).forEach(([key, value]) => { 17 | result.data.push(value) 18 | result.labels.push(key) 19 | }) 20 | return result 21 | } 22 | -------------------------------------------------------------------------------- /f/examples/product_dashboard.app/product_stock_total_worth.inline_script.lock: -------------------------------------------------------------------------------- 1 | { 2 | "version": "3", 3 | "remote": {} 4 | } 5 | -------------------------------------------------------------------------------- /f/examples/product_dashboard.app/product_stock_total_worth.inline_script.ts: -------------------------------------------------------------------------------- 1 | export async function main(data: {brand: string, title: string, stock: number, price: number}[]) { 2 | const result: {data: number[], labels: string[]} = { 3 | data: [], 4 | labels: [] 5 | } 6 | if(!Array.isArray(data)) { return result } 7 | 8 | const count: Record = {} 9 | data.forEach(row => { 10 | const key = `${row.brand} ${row.title}` 11 | const value = row.stock * row.price 12 | count[key] = value 13 | }) 14 | Object.entries(count).forEach(([key, value]) => { 15 | result.data.push(value) 16 | result.labels.push(key) 17 | }) 18 | return result 19 | } 20 | -------------------------------------------------------------------------------- /f/examples/product_dashboard.app/stock_worth_title.inline_script.lock: -------------------------------------------------------------------------------- 1 | { 2 | "version": "3", 3 | "remote": {} 4 | } 5 | -------------------------------------------------------------------------------- /f/examples/product_dashboard.app/stock_worth_title.inline_script.ts: -------------------------------------------------------------------------------- 1 | export async function main(data: {stock: number, price: number}[]) { 2 | const base = 'Stock Worth By Product' 3 | if(!Array.isArray(data)) { return base } 4 | 5 | const total = data.map(row => row.stock * row.price).reduce((acc, curr) => acc + curr) 6 | const formatter = new Intl.NumberFormat('en-US', { 7 | style: 'currency', 8 | currency: 'USD', 9 | maximumFractionDigits: 0, 10 | }); 11 | return base + ` (Total Worth: ${formatter.format(total)})` 12 | } 13 | -------------------------------------------------------------------------------- /f/examples/snappy_script.script.lock: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": {} 3 | } 4 | //bun.lockb 5 | -------------------------------------------------------------------------------- /f/examples/snappy_script.script.yaml: -------------------------------------------------------------------------------- 1 | summary: '' 2 | description: '' 3 | lock: '!inline f/examples/snappy_script.script.lock' 4 | kind: script 5 | schema: 6 | $schema: 'https://json-schema.org/draft/2020-12/schema' 7 | type: object 8 | properties: 9 | a: 10 | type: number 11 | description: '' 12 | default: null 13 | b: 14 | type: string 15 | description: '' 16 | default: null 17 | enum: 18 | - my 19 | - ennn 20 | originalType: enum 21 | e: 22 | type: string 23 | description: '' 24 | default: inferred type string from default arg 25 | originalType: string 26 | f: 27 | type: object 28 | description: '' 29 | default: 30 | nested: object 31 | properties: 32 | nested: 33 | type: string 34 | originalType: string 35 | required: 36 | - a 37 | - b 38 | -------------------------------------------------------------------------------- /f/examples/snappy_script.ts: -------------------------------------------------------------------------------- 1 | // import { toWords } from "number-to-words@1" 2 | import * as wmill from "windmill-client"; 3 | 4 | // fill the type, or use the +Resource type to get a type-safe reference to a resource 5 | // type Postgresql = object 6 | 7 | export async function main( 8 | a: number, 9 | b: "my" | "ennn", 10 | //c: Postgresql, 11 | //d: wmill.S3Object, // for large files backed by S3 (https://www.windmill.dev/docs/core_concepts/persistent_storage/large_data_files) 12 | e = "inferred type string from default arg", 13 | f = { nested: "object" } 14 | ) { 15 | // let x = await wmill.getVariable('u/user/foo') 16 | return { foo: a }; 17 | } 18 | f; 19 | -------------------------------------------------------------------------------- /f/examples_etl/folder.meta.yaml: -------------------------------------------------------------------------------- 1 | display_name: examples_etl 2 | extra_perms: 3 | g/all: false 4 | u/admin: true 5 | owners: 6 | - u/admin 7 | -------------------------------------------------------------------------------- /f/f/folder.meta.yaml: -------------------------------------------------------------------------------- 1 | display_name: f 2 | extra_perms: 3 | u/admin: true 4 | owners: 5 | - u/admin 6 | -------------------------------------------------------------------------------- /f/f/triumphant_script.script.lock: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": {} 3 | } 4 | //bun.lockb 5 | -------------------------------------------------------------------------------- /f/f/triumphant_script.script.yaml: -------------------------------------------------------------------------------- 1 | summary: '' 2 | description: '' 3 | lock: '!inline f/f/triumphant_script.script.lock' 4 | kind: script 5 | schema: 6 | $schema: 'https://json-schema.org/draft/2020-12/schema' 7 | type: object 8 | properties: 9 | a: 10 | type: number 11 | description: '' 12 | default: null 13 | b: 14 | type: string 15 | description: '' 16 | default: null 17 | enum: 18 | - my 19 | - enum 20 | e: 21 | type: string 22 | description: '' 23 | default: inferred type string from default arg 24 | f: 25 | type: object 26 | description: '' 27 | default: 28 | nested: object 29 | properties: 30 | nested: 31 | type: string 32 | required: 33 | - a 34 | - b 35 | -------------------------------------------------------------------------------- /f/f/triumphant_script.ts: -------------------------------------------------------------------------------- 1 | // import { toWords } from "number-to-words@1" 2 | import * as wmill from "windmill-client" 3 | 4 | // fill the type, or use the +Resource type to get a type-safe reference to a resource 5 | // type Postgresql = object 6 | 7 | export async function main( 8 | a: number, 9 | b: "my" | "enum", 10 | //c: Postgresql, 11 | //d: wmill.S3Object, // for large files backed by S3 (https://www.windmill.dev/docs/core_concepts/persistent_storage/large_data_files) 12 | e = "inferred type string from default arg", 13 | f = { nested: "object" }, 14 | ) { 15 | // let x = await wmill.getVariable('u/user/foo') 16 | return { foo: a }; 17 | } 18 | -------------------------------------------------------------------------------- /f/foo/compatible_script.script.lock: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": {} 3 | } 4 | //bun.lockb 5 | -------------------------------------------------------------------------------- /f/foo/compatible_script.script.yaml: -------------------------------------------------------------------------------- 1 | summary: '' 2 | description: '' 3 | lock: '!inline f/foo/compatible_script.script.lock' 4 | kind: script 5 | schema: 6 | $schema: 'https://json-schema.org/draft/2020-12/schema' 7 | type: object 8 | properties: 9 | a: 10 | type: number 11 | description: '' 12 | default: null 13 | b: 14 | type: string 15 | description: '' 16 | default: null 17 | enum: 18 | - my 19 | - enum 20 | e: 21 | type: string 22 | description: '' 23 | default: inferred type string from default arg 24 | f: 25 | type: object 26 | description: '' 27 | default: 28 | nested: object 29 | properties: 30 | nested: 31 | type: string 32 | required: 33 | - a 34 | - b 35 | -------------------------------------------------------------------------------- /f/foo/compatible_script.ts: -------------------------------------------------------------------------------- 1 | // import { toWords } from "number-to-words@1" 2 | import * as wmill from "windmill-client" 3 | 4 | // fill the type, or use the +Resource type to get a type-safe reference to a resource 5 | // type Postgresql = object 6 | 7 | export async function main( 8 | a: number, 9 | b: "my" | "enum", 10 | //c: Postgresql, 11 | //d: wmill.S3Object, // for large files backed by S3 (https://www.windmill.dev/docs/core_concepts/persistent_storage/large_data_files) 12 | e = "inferred type string from default arg", 13 | f = { nested: "object" }, 14 | ) { 15 | // let x = await wmill.getVariable('u/user/foo') 16 | return { foo: a }; 17 | } 18 | -------------------------------------------------------------------------------- /f/foo/folder.meta.yaml: -------------------------------------------------------------------------------- 1 | display_name: foo 2 | extra_perms: 3 | g/all: false 4 | u/admin: true 5 | owners: 6 | - u/admin 7 | -------------------------------------------------------------------------------- /f/foo/low_risk_script.deno.ts: -------------------------------------------------------------------------------- 1 | // Ctrl/CMD+. to cache dependencies on imports hover. 2 | 3 | // Deno uses "npm:" prefix to import from npm (https://deno.land/manual@v1.36.3/node/npm_specifiers) 4 | // import * as wmill from "npm:windmill-client@1.273.0" 5 | 6 | // fill the type, or use the +Resource type to get a type-safe reference to a resource 7 | // type Postgresql = object 8 | 9 | export async function main( 10 | a: number, 11 | b: "my" | "enum", 12 | //c: Postgresql, 13 | d = "inferred type string from default arg", 14 | e = { nested: "object" }, 15 | //e: wmill.Base64 16 | ) { 17 | // let x = await wmill.getVariable('u/user/foo') 18 | return { foo: a }; 19 | } 20 | -------------------------------------------------------------------------------- /f/foo/low_risk_script.script.lock: -------------------------------------------------------------------------------- 1 | { 2 | "version": "3", 3 | "remote": {} 4 | } 5 | -------------------------------------------------------------------------------- /f/foo/low_risk_script.script.yaml: -------------------------------------------------------------------------------- 1 | summary: '' 2 | description: '' 3 | lock: '!inline f/foo/low_risk_script.script.lock' 4 | kind: script 5 | schema: 6 | $schema: 'https://json-schema.org/draft/2020-12/schema' 7 | type: object 8 | properties: 9 | a: 10 | type: number 11 | description: '' 12 | default: null 13 | b: 14 | type: string 15 | description: '' 16 | default: null 17 | enum: 18 | - my 19 | - enum 20 | d: 21 | type: string 22 | description: '' 23 | default: inferred type string from default arg 24 | e: 25 | type: object 26 | description: '' 27 | default: 28 | nested: object 29 | properties: 30 | nested: 31 | type: string 32 | required: 33 | - a 34 | - b 35 | -------------------------------------------------------------------------------- /f/g/folder.meta.yaml: -------------------------------------------------------------------------------- 1 | display_name: g 2 | extra_perms: 3 | u/admin: true 4 | owners: 5 | - u/admin 6 | -------------------------------------------------------------------------------- /f/g/mature_script.script.lock: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": {} 3 | } 4 | //bun.lockb 5 | -------------------------------------------------------------------------------- /f/g/mature_script.script.yaml: -------------------------------------------------------------------------------- 1 | summary: '' 2 | description: '' 3 | lock: '!inline f/g/mature_script.script.lock' 4 | kind: script 5 | schema: 6 | $schema: 'https://json-schema.org/draft/2020-12/schema' 7 | type: object 8 | properties: 9 | a: 10 | type: number 11 | description: '' 12 | default: null 13 | b: 14 | type: string 15 | description: '' 16 | default: null 17 | enum: 18 | - my 19 | - enum 20 | e: 21 | type: string 22 | description: '' 23 | default: inferred type string from default arg 24 | f: 25 | type: object 26 | description: '' 27 | default: 28 | nested: object 29 | properties: 30 | nested: 31 | type: string 32 | required: 33 | - a 34 | - b 35 | -------------------------------------------------------------------------------- /f/g/mature_script.ts: -------------------------------------------------------------------------------- 1 | // import { toWords } from "number-to-words@1" 2 | import * as wmill from "windmill-client" 3 | 4 | // fill the type, or use the +Resource type to get a type-safe reference to a resource 5 | // type Postgresql = object 6 | 7 | export async function main( 8 | a: number, 9 | b: "my" | "enum", 10 | //c: Postgresql, 11 | //d: wmill.S3Object, // for large files backed by S3 (https://www.windmill.dev/docs/core_concepts/persistent_storage/large_data_files) 12 | e = "inferred type string from default arg", 13 | f = { nested: "object" }, 14 | ) { 15 | // let x = await wmill.getVariable('u/user/foo') 16 | return { foo: a }; 17 | } 18 | -------------------------------------------------------------------------------- /f/git/folder.meta.yaml: -------------------------------------------------------------------------------- 1 | display_name: git 2 | extra_perms: 3 | g/all: false 4 | u/admin: true 5 | owners: 6 | - u/admin 7 | -------------------------------------------------------------------------------- /f/group/copy_of_weroew_prew_porkewp_orewpo_r.deno.ts: -------------------------------------------------------------------------------- 1 | // Ctrl/CMD+. to cache dependencies on imports hover. 2 | 3 | // import { toWords } from "npm:number-to-words@1" 4 | // import * as wmill from "https://deno.land/x/windmill@v1.138.4/mod.ts" 5 | 6 | // fill the type, or use the +Resource type to get a type-safe reference to a resource 7 | // type Postgresql = object 8 | 9 | export async function main( 10 | a: number, 11 | b: "my" | "enum", 12 | //c: Postgresql, 13 | d = "inferred type string from default arg", 14 | e = { nested: "object" }, 15 | //e: wmill.Base64 16 | ) { 17 | // let x = await wmill.getVariable('u/user/foo') 18 | return { foo: a }; 19 | } 20 | -------------------------------------------------------------------------------- /f/group/copy_of_weroew_prew_porkewp_orewpo_r.script.lock: -------------------------------------------------------------------------------- 1 | { 2 | "version": "3", 3 | "remote": {} 4 | } 5 | -------------------------------------------------------------------------------- /f/group/copy_of_weroew_prew_porkewp_orewpo_r.script.yaml: -------------------------------------------------------------------------------- 1 | summary: Copy of weroew prew porkewp orewpo r 2 | description: '' 3 | lock: '!inline f/group/copy_of_weroew_prew_porkewp_orewpo_r.script.lock' 4 | kind: script 5 | schema: 6 | $schema: 'https://json-schema.org/draft/2020-12/schema' 7 | type: object 8 | properties: 9 | a: 10 | type: number 11 | description: '' 12 | default: null 13 | b: 14 | type: string 15 | description: '' 16 | default: null 17 | enum: 18 | - my 19 | - enum 20 | d: 21 | type: string 22 | description: '' 23 | default: inferred type string from default arg 24 | e: 25 | type: object 26 | description: '' 27 | default: 28 | nested: object 29 | properties: 30 | nested: 31 | type: string 32 | required: 33 | - a 34 | - b 35 | -------------------------------------------------------------------------------- /f/group/folder.meta.yaml: -------------------------------------------------------------------------------- 1 | display_name: group 2 | extra_perms: 3 | g/usergroup: false 4 | owners: [] 5 | -------------------------------------------------------------------------------- /f/h/exhilarating_script.script.lock: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": {} 3 | } 4 | //bun.lockb 5 | -------------------------------------------------------------------------------- /f/h/exhilarating_script.script.yaml: -------------------------------------------------------------------------------- 1 | summary: '' 2 | description: '' 3 | lock: '!inline f/h/exhilarating_script.script.lock' 4 | kind: script 5 | schema: 6 | $schema: 'https://json-schema.org/draft/2020-12/schema' 7 | type: object 8 | properties: 9 | a: 10 | type: number 11 | description: '' 12 | default: null 13 | b: 14 | type: string 15 | description: '' 16 | default: null 17 | enum: 18 | - my 19 | - enum 20 | e: 21 | type: string 22 | description: '' 23 | default: inferred type string from default arg 24 | f: 25 | type: object 26 | description: '' 27 | default: 28 | nested: object 29 | properties: 30 | nested: 31 | type: string 32 | required: 33 | - a 34 | - b 35 | -------------------------------------------------------------------------------- /f/h/exhilarating_script.ts: -------------------------------------------------------------------------------- 1 | // import { toWords } from "number-to-words@1" 2 | import * as wmill from "windmill-client" 3 | 4 | // fill the type, or use the +Resource type to get a type-safe reference to a resource 5 | // type Postgresql = object 6 | 7 | export async function main( 8 | a: number, 9 | b: "my" | "enum", 10 | //c: Postgresql, 11 | //d: wmill.S3Object, // for large files backed by S3 (https://www.windmill.dev/docs/core_concepts/persistent_storage/large_data_files) 12 | e = "inferred type string from default arg", 13 | f = { nested: "object" }, 14 | ) { 15 | // let x = await wmill.getVariable('u/user/foo') 16 | return { foo: a }; 17 | } 18 | -------------------------------------------------------------------------------- /f/h/folder.meta.yaml: -------------------------------------------------------------------------------- 1 | display_name: h 2 | extra_perms: 3 | u/admin: true 4 | owners: 5 | - u/admin 6 | -------------------------------------------------------------------------------- /f/i/folder.meta.yaml: -------------------------------------------------------------------------------- 1 | display_name: i 2 | extra_perms: 3 | u/admin: true 4 | owners: 5 | - u/admin 6 | -------------------------------------------------------------------------------- /f/i/speedy_script.script.lock: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": {} 3 | } 4 | //bun.lockb 5 | -------------------------------------------------------------------------------- /f/i/speedy_script.script.yaml: -------------------------------------------------------------------------------- 1 | summary: '' 2 | description: '' 3 | lock: '!inline f/i/speedy_script.script.lock' 4 | kind: script 5 | schema: 6 | $schema: 'https://json-schema.org/draft/2020-12/schema' 7 | type: object 8 | properties: 9 | a: 10 | type: number 11 | description: '' 12 | default: null 13 | b: 14 | type: string 15 | description: '' 16 | default: null 17 | enum: 18 | - my 19 | - enum 20 | e: 21 | type: string 22 | description: '' 23 | default: inferred type string from default arg 24 | f: 25 | type: object 26 | description: '' 27 | default: 28 | nested: object 29 | properties: 30 | nested: 31 | type: string 32 | required: 33 | - a 34 | - b 35 | -------------------------------------------------------------------------------- /f/i/speedy_script.ts: -------------------------------------------------------------------------------- 1 | // import { toWords } from "number-to-words@1" 2 | import * as wmill from "windmill-client" 3 | 4 | // fill the type, or use the +Resource type to get a type-safe reference to a resource 5 | // type Postgresql = object 6 | 7 | export async function main( 8 | a: number, 9 | b: "my" | "enum", 10 | //c: Postgresql, 11 | //d: wmill.S3Object, // for large files backed by S3 (https://www.windmill.dev/docs/core_concepts/persistent_storage/large_data_files) 12 | e = "inferred type string from default arg", 13 | f = { nested: "object" }, 14 | ) { 15 | // let x = await wmill.getVariable('u/user/foo') 16 | return { foo: a }; 17 | } 18 | -------------------------------------------------------------------------------- /f/j/adoring_script.script.lock: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": {} 3 | } 4 | //bun.lockb 5 | -------------------------------------------------------------------------------- /f/j/adoring_script.script.yaml: -------------------------------------------------------------------------------- 1 | summary: '' 2 | description: '' 3 | lock: '!inline f/j/adoring_script.script.lock' 4 | kind: script 5 | schema: 6 | $schema: 'https://json-schema.org/draft/2020-12/schema' 7 | type: object 8 | properties: 9 | a: 10 | type: number 11 | description: '' 12 | default: null 13 | b: 14 | type: string 15 | description: '' 16 | default: null 17 | enum: 18 | - my 19 | - enum 20 | e: 21 | type: string 22 | description: '' 23 | default: inferred type string from default arg 24 | f: 25 | type: object 26 | description: '' 27 | default: 28 | nested: object 29 | properties: 30 | nested: 31 | type: string 32 | required: 33 | - a 34 | - b 35 | -------------------------------------------------------------------------------- /f/j/adoring_script.ts: -------------------------------------------------------------------------------- 1 | // import { toWords } from "number-to-words@1" 2 | import * as wmill from "windmill-client" 3 | 4 | // fill the type, or use the +Resource type to get a type-safe reference to a resource 5 | // type Postgresql = object 6 | 7 | export async function main( 8 | a: number, 9 | b: "my" | "enum", 10 | //c: Postgresql, 11 | //d: wmill.S3Object, // for large files backed by S3 (https://www.windmill.dev/docs/core_concepts/persistent_storage/large_data_files) 12 | e = "inferred type string from default arg", 13 | f = { nested: "object" }, 14 | ) { 15 | // let x = await wmill.getVariable('u/user/foo') 16 | return { foo: a }; 17 | } 18 | -------------------------------------------------------------------------------- /f/j/folder.meta.yaml: -------------------------------------------------------------------------------- 1 | display_name: j 2 | extra_perms: 3 | u/admin: true 4 | owners: 5 | - u/admin 6 | -------------------------------------------------------------------------------- /f/k/folder.meta.yaml: -------------------------------------------------------------------------------- 1 | display_name: k 2 | extra_perms: 3 | u/admin: true 4 | owners: 5 | - u/admin 6 | -------------------------------------------------------------------------------- /f/k/happier_script.script.lock: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": {} 3 | } 4 | //bun.lockb 5 | -------------------------------------------------------------------------------- /f/k/happier_script.script.yaml: -------------------------------------------------------------------------------- 1 | summary: '' 2 | description: '' 3 | lock: '!inline f/k/happier_script.script.lock' 4 | kind: script 5 | schema: 6 | $schema: 'https://json-schema.org/draft/2020-12/schema' 7 | type: object 8 | properties: 9 | a: 10 | type: number 11 | description: '' 12 | default: null 13 | b: 14 | type: string 15 | description: '' 16 | default: null 17 | enum: 18 | - my 19 | - enum 20 | e: 21 | type: string 22 | description: '' 23 | default: inferred type string from default arg 24 | f: 25 | type: object 26 | description: '' 27 | default: 28 | nested: object 29 | properties: 30 | nested: 31 | type: string 32 | required: 33 | - a 34 | - b 35 | -------------------------------------------------------------------------------- /f/k/happier_script.ts: -------------------------------------------------------------------------------- 1 | // import { toWords } from "number-to-words@1" 2 | import * as wmill from "windmill-client" 3 | 4 | // fill the type, or use the +Resource type to get a type-safe reference to a resource 5 | // type Postgresql = object 6 | 7 | export async function main( 8 | a: number, 9 | b: "my" | "enum", 10 | //c: Postgresql, 11 | //d: wmill.S3Object, // for large files backed by S3 (https://www.windmill.dev/docs/core_concepts/persistent_storage/large_data_files) 12 | e = "inferred type string from default arg", 13 | f = { nested: "object" }, 14 | ) { 15 | // let x = await wmill.getVariable('u/user/foo') 16 | return { foo: a }; 17 | } 18 | -------------------------------------------------------------------------------- /f/l/folder.meta.yaml: -------------------------------------------------------------------------------- 1 | display_name: l 2 | extra_perms: 3 | u/admin: true 4 | owners: 5 | - u/admin 6 | -------------------------------------------------------------------------------- /f/l/rational_script.script.lock: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": {} 3 | } 4 | //bun.lockb 5 | -------------------------------------------------------------------------------- /f/l/rational_script.script.yaml: -------------------------------------------------------------------------------- 1 | summary: '' 2 | description: '' 3 | lock: '!inline f/l/rational_script.script.lock' 4 | kind: script 5 | schema: 6 | $schema: 'https://json-schema.org/draft/2020-12/schema' 7 | type: object 8 | properties: 9 | a: 10 | type: number 11 | description: '' 12 | default: null 13 | b: 14 | type: string 15 | description: '' 16 | default: null 17 | enum: 18 | - my 19 | - enum 20 | e: 21 | type: string 22 | description: '' 23 | default: inferred type string from default arg 24 | f: 25 | type: object 26 | description: '' 27 | default: 28 | nested: object 29 | properties: 30 | nested: 31 | type: string 32 | required: 33 | - a 34 | - b 35 | -------------------------------------------------------------------------------- /f/l/rational_script.ts: -------------------------------------------------------------------------------- 1 | // import { toWords } from "number-to-words@1" 2 | import * as wmill from "windmill-client" 3 | 4 | // fill the type, or use the +Resource type to get a type-safe reference to a resource 5 | // type Postgresql = object 6 | 7 | export async function main( 8 | a: number, 9 | b: "my" | "enum", 10 | //c: Postgresql, 11 | //d: wmill.S3Object, // for large files backed by S3 (https://www.windmill.dev/docs/core_concepts/persistent_storage/large_data_files) 12 | e = "inferred type string from default arg", 13 | f = { nested: "object" }, 14 | ) { 15 | // let x = await wmill.getVariable('u/user/foo') 16 | return { foo: a }; 17 | } 18 | -------------------------------------------------------------------------------- /f/m/folder.meta.yaml: -------------------------------------------------------------------------------- 1 | display_name: m 2 | extra_perms: 3 | u/admin: true 4 | owners: 5 | - u/admin 6 | -------------------------------------------------------------------------------- /f/m/grand_script.script.lock: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": {} 3 | } 4 | //bun.lockb 5 | -------------------------------------------------------------------------------- /f/m/grand_script.script.yaml: -------------------------------------------------------------------------------- 1 | summary: '' 2 | description: '' 3 | lock: '!inline f/m/grand_script.script.lock' 4 | kind: script 5 | schema: 6 | $schema: 'https://json-schema.org/draft/2020-12/schema' 7 | type: object 8 | properties: 9 | a: 10 | type: number 11 | description: '' 12 | default: null 13 | b: 14 | type: string 15 | description: '' 16 | default: null 17 | enum: 18 | - my 19 | - enum 20 | e: 21 | type: string 22 | description: '' 23 | default: inferred type string from default arg 24 | f: 25 | type: object 26 | description: '' 27 | default: 28 | nested: object 29 | properties: 30 | nested: 31 | type: string 32 | required: 33 | - a 34 | - b 35 | -------------------------------------------------------------------------------- /f/m/grand_script.ts: -------------------------------------------------------------------------------- 1 | // import { toWords } from "number-to-words@1" 2 | import * as wmill from "windmill-client" 3 | 4 | // fill the type, or use the +Resource type to get a type-safe reference to a resource 5 | // type Postgresql = object 6 | 7 | export async function main( 8 | a: number, 9 | b: "my" | "enum", 10 | //c: Postgresql, 11 | //d: wmill.S3Object, // for large files backed by S3 (https://www.windmill.dev/docs/core_concepts/persistent_storage/large_data_files) 12 | e = "inferred type string from default arg", 13 | f = { nested: "object" }, 14 | ) { 15 | // let x = await wmill.getVariable('u/user/foo') 16 | return { foo: a }; 17 | } 18 | -------------------------------------------------------------------------------- /f/n/folder.meta.yaml: -------------------------------------------------------------------------------- 1 | display_name: n 2 | extra_perms: 3 | u/admin: true 4 | owners: 5 | - u/admin 6 | -------------------------------------------------------------------------------- /f/n/quieter_script.script.lock: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": {} 3 | } 4 | //bun.lockb 5 | -------------------------------------------------------------------------------- /f/n/quieter_script.script.yaml: -------------------------------------------------------------------------------- 1 | summary: '' 2 | description: '' 3 | lock: '!inline f/n/quieter_script.script.lock' 4 | kind: script 5 | schema: 6 | $schema: 'https://json-schema.org/draft/2020-12/schema' 7 | type: object 8 | properties: 9 | a: 10 | type: number 11 | description: '' 12 | default: null 13 | b: 14 | type: string 15 | description: '' 16 | default: null 17 | enum: 18 | - my 19 | - enum 20 | e: 21 | type: string 22 | description: '' 23 | default: inferred type string from default arg 24 | f: 25 | type: object 26 | description: '' 27 | default: 28 | nested: object 29 | properties: 30 | nested: 31 | type: string 32 | required: 33 | - a 34 | - b 35 | -------------------------------------------------------------------------------- /f/n/quieter_script.ts: -------------------------------------------------------------------------------- 1 | // import { toWords } from "number-to-words@1" 2 | import * as wmill from "windmill-client" 3 | 4 | // fill the type, or use the +Resource type to get a type-safe reference to a resource 5 | // type Postgresql = object 6 | 7 | export async function main( 8 | a: number, 9 | b: "my" | "enum", 10 | //c: Postgresql, 11 | //d: wmill.S3Object, // for large files backed by S3 (https://www.windmill.dev/docs/core_concepts/persistent_storage/large_data_files) 12 | e = "inferred type string from default arg", 13 | f = { nested: "object" }, 14 | ) { 15 | // let x = await wmill.getVariable('u/user/foo') 16 | return { foo: a }; 17 | } 18 | -------------------------------------------------------------------------------- /f/o/fortunate_script.script.lock: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": {} 3 | } 4 | //bun.lockb 5 | -------------------------------------------------------------------------------- /f/o/fortunate_script.script.yaml: -------------------------------------------------------------------------------- 1 | summary: '' 2 | description: '' 3 | lock: '!inline f/o/fortunate_script.script.lock' 4 | kind: script 5 | schema: 6 | $schema: 'https://json-schema.org/draft/2020-12/schema' 7 | type: object 8 | properties: 9 | a: 10 | type: number 11 | description: '' 12 | default: null 13 | b: 14 | type: string 15 | description: '' 16 | default: null 17 | enum: 18 | - my 19 | - enum 20 | e: 21 | type: string 22 | description: '' 23 | default: inferred type string from default arg 24 | f: 25 | type: object 26 | description: '' 27 | default: 28 | nested: object 29 | properties: 30 | nested: 31 | type: string 32 | required: 33 | - a 34 | - b 35 | -------------------------------------------------------------------------------- /f/o/fortunate_script.ts: -------------------------------------------------------------------------------- 1 | // import { toWords } from "number-to-words@1" 2 | import * as wmill from "windmill-client" 3 | 4 | // fill the type, or use the +Resource type to get a type-safe reference to a resource 5 | // type Postgresql = object 6 | 7 | export async function main( 8 | a: number, 9 | b: "my" | "enum", 10 | //c: Postgresql, 11 | //d: wmill.S3Object, // for large files backed by S3 (https://www.windmill.dev/docs/core_concepts/persistent_storage/large_data_files) 12 | e = "inferred type string from default arg", 13 | f = { nested: "object" }, 14 | ) { 15 | // let x = await wmill.getVariable('u/user/foo') 16 | return { foo: a }; 17 | } 18 | -------------------------------------------------------------------------------- /f/user/ambitious_script.deno.ts: -------------------------------------------------------------------------------- 1 | // Ctrl/CMD+. to cache dependencies on imports hover. 2 | 3 | // import { toWords } from "npm:number-to-words@1" 4 | // import * as wmill from "https://deno.land/x/windmill@v1.138.4/mod.ts" 5 | 6 | // fill the type, or use the +Resource type to get a type-safe reference to a resource 7 | // type Postgresql = object 8 | 9 | export async function main( 10 | a: number, 11 | b: "my" | "enum", 12 | //c: Postgresql, 13 | d = "inferred type string from default arg", 14 | e = { nested: "object" }, 15 | //e: wmill.Base64 16 | ) { 17 | // let x = await wmill.getVariable('u/user/foo') 18 | return { foo: a }; 19 | } 20 | -------------------------------------------------------------------------------- /f/user/ambitious_script.script.lock: -------------------------------------------------------------------------------- 1 | { 2 | "version": "3", 3 | "remote": {} 4 | } 5 | -------------------------------------------------------------------------------- /f/user/ambitious_script.script.yaml: -------------------------------------------------------------------------------- 1 | summary: '' 2 | description: '' 3 | lock: '!inline f/user/ambitious_script.script.lock' 4 | kind: script 5 | schema: 6 | $schema: 'https://json-schema.org/draft/2020-12/schema' 7 | type: object 8 | properties: 9 | a: 10 | type: number 11 | description: '' 12 | default: null 13 | b: 14 | type: string 15 | description: '' 16 | default: null 17 | enum: 18 | - my 19 | - enum 20 | d: 21 | type: string 22 | description: '' 23 | default: inferred type string from default arg 24 | e: 25 | type: object 26 | description: '' 27 | default: 28 | nested: object 29 | properties: 30 | nested: 31 | type: string 32 | required: 33 | - a 34 | - b 35 | -------------------------------------------------------------------------------- /f/user/benevolent_mysql.resource.yaml: -------------------------------------------------------------------------------- 1 | description: '' 2 | value: 3 | database: foo 4 | host: aws.connect.psdb.cloud 5 | password: '$var:f/user/benevolent_mysql' 6 | port: 3306 7 | ssl: true 8 | user: obfx8xnciigv3fw74wy1 9 | resource_type: mysql 10 | -------------------------------------------------------------------------------- /f/user/benevolent_mysql.variable.yaml: -------------------------------------------------------------------------------- 1 | account: null 2 | description: Token for mysql 3 | value: >- 4 | nBSvF62kLE1ALo4mmoCy7esE1vHomr0/toWLMnJxPTFHzNvHoJ2cG8/fABlnvpe1R8ZSKOUEE97oHHptYXf1wA== 5 | is_oauth: false 6 | is_secret: true 7 | -------------------------------------------------------------------------------- /f/user/folder.meta.yaml: -------------------------------------------------------------------------------- 1 | display_name: user 2 | extra_perms: 3 | u/admin: true 4 | u/foo: false 5 | u/test23: false 6 | owners: 7 | - u/admin 8 | -------------------------------------------------------------------------------- /f/user/foo.pg.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/windmill-labs/windmill-sync-example/6a6c4e9e9b3379bdfa1987d891f2fbb42ab8ec37/f/user/foo.pg.sql -------------------------------------------------------------------------------- /f/user/foo.script.yaml: -------------------------------------------------------------------------------- 1 | summary: '' 2 | description: '' 3 | lock: '' 4 | kind: script 5 | schema: 6 | $schema: 'https://json-schema.org/draft/2020-12/schema' 7 | type: object 8 | properties: 9 | database: 10 | type: object 11 | description: '' 12 | format: resource-postgresql 13 | required: 14 | - database 15 | -------------------------------------------------------------------------------- /f/user/innocuous_script.deno.ts: -------------------------------------------------------------------------------- 1 | // Ctrl/CMD+. to cache dependencies on imports hover. 2 | 3 | // import { toWords } from "npm:number-to-words@1" 4 | // import * as wmill from "https://deno.land/x/windmill@v1.138.4/mod.ts" 5 | 6 | // fill the type, or use the +Resource type to get a type-safe reference to a resource 7 | // type Postgresql = object 8 | 9 | export async function main( 10 | a: number, 11 | b: "my" | "enum", 12 | //c: Postgresql, 13 | d = "inferred type string from default arg", 14 | e = { nested: "object" }, 15 | //e: wmill.Base64 16 | ) { 17 | // let x = await wmill.getVariable('u/user/foo') 18 | return { foo: a }; 19 | } 20 | -------------------------------------------------------------------------------- /f/user/innocuous_script.script.lock: -------------------------------------------------------------------------------- 1 | { 2 | "version": "3", 3 | "remote": {} 4 | } 5 | -------------------------------------------------------------------------------- /f/user/innocuous_script.script.yaml: -------------------------------------------------------------------------------- 1 | summary: '' 2 | description: '' 3 | lock: '!inline f/user/innocuous_script.script.lock' 4 | kind: script 5 | schema: 6 | $schema: 'https://json-schema.org/draft/2020-12/schema' 7 | type: object 8 | properties: 9 | a: 10 | type: number 11 | description: '' 12 | default: null 13 | b: 14 | type: string 15 | description: '' 16 | default: null 17 | enum: 18 | - my 19 | - enum 20 | d: 21 | type: string 22 | description: '' 23 | default: inferred type string from default arg 24 | e: 25 | type: object 26 | description: '' 27 | default: 28 | nested: object 29 | properties: 30 | nested: 31 | type: string 32 | required: 33 | - a 34 | - b 35 | -------------------------------------------------------------------------------- /img/git_sync_tab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/windmill-labs/windmill-sync-example/6a6c4e9e9b3379bdfa1987d891f2fbb42ab8ec37/img/git_sync_tab.png -------------------------------------------------------------------------------- /img/resource_creation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/windmill-labs/windmill-sync-example/6a6c4e9e9b3379bdfa1987d891f2fbb42ab8ec37/img/resource_creation.png -------------------------------------------------------------------------------- /img/token_creation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/windmill-labs/windmill-sync-example/6a6c4e9e9b3379bdfa1987d891f2fbb42ab8ec37/img/token_creation.png -------------------------------------------------------------------------------- /wmill-lock.yaml: -------------------------------------------------------------------------------- 1 | locks: 2 | f/a/usable_undefined: f2cd8e9da89bc90c29708f84e7724c253597dcf67657a7915db03529afb8d56a 3 | f/b/gorgeous_script: 61aeaf810b68a80af9b476fb6f297cd30d436af09b1f279476cffefcacf64825 4 | f/c/trusted_script: f29b3f12ba2a301ffff7f8e7910b28a48a830c6f059f7248aa7778b3158f6c5d 5 | f/d/booming_script: 64bb4dbdb904c2f57833307d6ac644157a8d145d84e766468c640f9645e9b2a1 6 | f/delivery/cleared_script: 6c41d6bc0f4dfa7fbbaea5dc57a7797accf10a70870dced2caed6825121ac8f2 7 | f/e/cheaper_script: 2a3079f83bbe9cf8c15b5bffc877726a45a72f80544790323378aad50cbb8182 8 | f/examples/efficient_script: cb94acbcd95f4d1a62bd209f16068f43b6087f65046f3d53c3b3e9e541597b9f 9 | f/examples/foo: 21e74f8089e3f036b30a9b0dbc5d8094e301c5e99cc5bba126a4cbf92221614b 10 | f/examples/foobar: 82c6f233b6f17cc37dd7396eeeefc2fe3d936bbfe64768dab8975a940abd5dd2 11 | f/examples/snappy_script: fd74989958d66ae74711323558a9febe43ee1057596a15388a98356227bb99e1 12 | f/f/triumphant_script: 01cfb405da94f5a24a6ba6a641b8608618a093f1f39aa0011aa0de1de6f168f2 13 | f/foo/compatible_script: 6da7bc53f77d19fddbbe288c683fac48b88a8a1c6f0924c1ace9bc1512d29202 14 | f/foo/low_risk_script: aba1f4949b66f4d08f31586946e22ba3ca867287482da392457e8c98360518a1 15 | f/g/mature_script: d20e9a51facfe2d7ed952ce37b2c67550d48f1757ca7ebca9c57b6e587ff21f1 16 | f/group/copy_of_weroew_prew_porkewp_orewpo_r: 2e0cf1a495fab3fcb8c403b72941a4ac7d6ffcc5b514d5df49b1aad387d2c03e 17 | f/h/exhilarating_script: 0c4f31e970c466a2c7bea05bf2ccce55d9643c39b431fcb4255560109f1be683 18 | f/i/speedy_script: 185de92ce6d083fc9cd4c05aa0c13aa073b1c36c4ad83646d3b0d7d402e0c335 19 | f/j/adoring_script: e5ab5609346f965b01fe48eb3e6bba82280a2428d2132254f1f43752992b14b3 20 | f/k/happier_script: 48667a95bd0ea3d377b5f3c51d42bf982bf5c983f26712036c4aa0a58d729634 21 | f/l/rational_script: 49b18192f8c3f68357c024b00d91eef2d3eff6fc9ed687c9cb5e4db917beb201 22 | f/m/grand_script: 29a0a73f88f876988b5800cd8af2cd9bec26cd10c3ec55edf03150dc05edbaba 23 | f/n/quieter_script: 45a1f4f46d8a62457510ff3d30eaa16ca897e8a071addd2c67e0c18fba98cd00 24 | f/o/fortunate_script: d95a08b011d3dd9e280f9955895bd48ff88c9d90273f30e051f1034f86409518 25 | f/user/ambitious_script: f2d061ef379d829407222c8e74c61e0935f96d661edb1649dc021df25befddda 26 | f/user/foo: 21e74f8089e3f036b30a9b0dbc5d8094e301c5e99cc5bba126a4cbf92221614b 27 | f/user/innocuous_script: 184116bf717a969b227fdd5871ed1b1806e4623681f5f5cd5137ac50975487ae 28 | -------------------------------------------------------------------------------- /wmill.yaml: -------------------------------------------------------------------------------- 1 | includes: ["f/**"] # uses "*" or uncomment this line to include everything. Note that wmill will only consider files with valid path (u/ or f/, with the right extension) 2 | excludes: [] # excludes patterns here 3 | 4 | defaultTs: "bun" # bun is the default, set it to deno if you primarily use deno to avoid needing the .deno.ts extension 5 | --------------------------------------------------------------------------------