From 6d8e5bf955df7337435453ef23b9c992299356ea Mon Sep 17 00:00:00 2001
From: Morten Olsen
Date: Fri, 12 Jan 2024 12:43:51 +0100
Subject: [PATCH] init
---
.dockerignore | 5 +
.eslintrc | 16 +
.github/FUNDING.yml | 1 +
.github/release-drafter-config.yml | 53 +
.github/workflows/auto-label.yml | 21 +
.github/workflows/release.yml | 123 +
.gitignore | 4 +
.npmrc | 1 +
.prettierrc | 18 +
LICENSE | 675 ++
README.md | 48 +
assets/logo.png | Bin 0 -> 1319760 bytes
docker-compose.yaml | 9 +
docker/Dockerfile | 42 +
docker/entrypoint.sh | 12 +
docs/anti-features.md | 19 +
docs/creating-an-api.md | 0
docs/faq.md | 3 +
docs/first-workload.md | 44 +
docs/getting-started.md | 34 +
docs/interacting-with-server.md | 70 +
docs/managing-secrets.md | 0
docs/setting-up-oidc.md | 0
docs/setup-server.md | 60 +
package.json | 27 +
packages/cli/.gitignore | 3 +
packages/cli/bin/index.mjs | 4 +
packages/cli/package.json | 44 +
packages/cli/src/bundler/bundler.ts | 42 +
packages/cli/src/client/client.ts | 22 +
.../src/commands/artifacts/artifacts.list.ts | 37 +
.../cli/src/commands/artifacts/artifacts.ts | 7 +
packages/cli/src/commands/auth/auth.login.ts | 25 +
packages/cli/src/commands/auth/auth.ts | 7 +
packages/cli/src/commands/loads/loads.list.ts | 20 +
packages/cli/src/commands/loads/loads.push.ts | 39 +
packages/cli/src/commands/loads/loads.ts | 10 +
packages/cli/src/commands/local/local.run.ts | 35 +
packages/cli/src/commands/local/local.ts | 8 +
packages/cli/src/commands/logs/logs.list.ts | 41 +
packages/cli/src/commands/logs/logs.ts | 7 +
packages/cli/src/commands/runs/runs.create.ts | 19 +
packages/cli/src/commands/runs/runs.list.ts | 21 +
packages/cli/src/commands/runs/runs.ts | 8 +
.../cli/src/commands/secrets/secrets.list.ts | 33 +
.../src/commands/secrets/secrets.remove.ts | 21 +
.../cli/src/commands/secrets/secrets.set.ts | 22 +
packages/cli/src/commands/secrets/secrets.ts | 11 +
packages/cli/src/index.ts | 18 +
packages/cli/src/utils/step.ts | 15 +
packages/cli/tsconfig.json | 9 +
packages/configs/package.json | 12 +
packages/configs/tsconfig.esm.json | 17 +
packages/examples/.gitignore | 3 +
packages/examples/package.json | 25 +
packages/examples/src/simple.ts | 5 +
packages/examples/test.sh | 7 +
packages/examples/tsconfig.json | 9 +
packages/mini-loader/.gitignore | 3 +
packages/mini-loader/package.json | 23 +
.../mini-loader/src/artifacts/artifacts.ts | 26 +
packages/mini-loader/src/index.ts | 10 +
packages/mini-loader/src/input/input.ts | 11 +
packages/mini-loader/src/logger/logger.ts | 50 +
packages/mini-loader/src/secrets/secrets.ts | 12 +
packages/mini-loader/src/utils.ts | 8 +
packages/mini-loader/tsconfig.json | 9 +
packages/runner/.gitignore | 3 +
packages/runner/package.json | 27 +
packages/runner/src/index.ts | 46 +
packages/runner/tsconfig.json | 9 +
packages/server/.gitignore | 4 +
packages/server/bin/index.mjs | 4 +
packages/server/package.json | 42 +
packages/server/src/auth/auth.ts | 50 +
packages/server/src/config/config.ts | 19 +
packages/server/src/database/database.ts | 36 +
.../src/database/migrations/migration.init.ts | 68 +
.../database/migrations/migrations.source.ts | 19 +
packages/server/src/index.ts | 31 +
packages/server/src/knex.d.ts | 47 +
.../src/repos/artifacts/artifacts.schemas.ts | 22 +
.../server/src/repos/artifacts/artifacts.ts | 116 +
.../server/src/repos/loads/loads.schemas.ts | 18 +
packages/server/src/repos/loads/loads.ts | 94 +
.../server/src/repos/logs/logs.schemas.ts | 25 +
packages/server/src/repos/logs/logs.ts | 122 +
packages/server/src/repos/repos.ts | 66 +
.../server/src/repos/runs/runs.schemas.ts | 28 +
packages/server/src/repos/runs/runs.ts | 140 +
.../src/repos/secrets/secrets.schemas.ts | 17 +
packages/server/src/repos/secrets/secrets.ts | 76 +
.../server/src/router/router.artifacts.ts | 43 +
packages/server/src/router/router.loads.ts | 27 +
packages/server/src/router/router.logs.ts | 43 +
packages/server/src/router/router.runs.ts | 33 +
packages/server/src/router/router.secrets.ts | 42 +
packages/server/src/router/router.ts | 19 +
packages/server/src/router/router.utils.ts | 30 +
packages/server/src/runner/runner.instance.ts | 92 +
packages/server/src/runner/runner.ts | 41 +
packages/server/src/runtime/runtime.ts | 50 +
packages/server/src/server/server.ts | 28 +
packages/server/tsconfig.json | 9 +
pnpm-lock.yaml | 5559 +++++++++++++++++
pnpm-workspace.yaml | 2 +
scripts/set-version.mjs | 16 +
tsconfig.json | 17 +
turbo.json | 23 +
109 files changed, 9246 insertions(+)
create mode 100644 .dockerignore
create mode 100644 .eslintrc
create mode 100644 .github/FUNDING.yml
create mode 100644 .github/release-drafter-config.yml
create mode 100644 .github/workflows/auto-label.yml
create mode 100644 .github/workflows/release.yml
create mode 100644 .gitignore
create mode 100644 .npmrc
create mode 100644 .prettierrc
create mode 100644 LICENSE
create mode 100644 README.md
create mode 100644 assets/logo.png
create mode 100644 docker-compose.yaml
create mode 100644 docker/Dockerfile
create mode 100644 docker/entrypoint.sh
create mode 100644 docs/anti-features.md
create mode 100644 docs/creating-an-api.md
create mode 100644 docs/faq.md
create mode 100644 docs/first-workload.md
create mode 100644 docs/getting-started.md
create mode 100644 docs/interacting-with-server.md
create mode 100644 docs/managing-secrets.md
create mode 100644 docs/setting-up-oidc.md
create mode 100644 docs/setup-server.md
create mode 100644 package.json
create mode 100644 packages/cli/.gitignore
create mode 100755 packages/cli/bin/index.mjs
create mode 100644 packages/cli/package.json
create mode 100644 packages/cli/src/bundler/bundler.ts
create mode 100644 packages/cli/src/client/client.ts
create mode 100644 packages/cli/src/commands/artifacts/artifacts.list.ts
create mode 100644 packages/cli/src/commands/artifacts/artifacts.ts
create mode 100644 packages/cli/src/commands/auth/auth.login.ts
create mode 100644 packages/cli/src/commands/auth/auth.ts
create mode 100644 packages/cli/src/commands/loads/loads.list.ts
create mode 100644 packages/cli/src/commands/loads/loads.push.ts
create mode 100644 packages/cli/src/commands/loads/loads.ts
create mode 100644 packages/cli/src/commands/local/local.run.ts
create mode 100644 packages/cli/src/commands/local/local.ts
create mode 100644 packages/cli/src/commands/logs/logs.list.ts
create mode 100644 packages/cli/src/commands/logs/logs.ts
create mode 100644 packages/cli/src/commands/runs/runs.create.ts
create mode 100644 packages/cli/src/commands/runs/runs.list.ts
create mode 100644 packages/cli/src/commands/runs/runs.ts
create mode 100644 packages/cli/src/commands/secrets/secrets.list.ts
create mode 100644 packages/cli/src/commands/secrets/secrets.remove.ts
create mode 100644 packages/cli/src/commands/secrets/secrets.set.ts
create mode 100644 packages/cli/src/commands/secrets/secrets.ts
create mode 100644 packages/cli/src/index.ts
create mode 100644 packages/cli/src/utils/step.ts
create mode 100644 packages/cli/tsconfig.json
create mode 100644 packages/configs/package.json
create mode 100644 packages/configs/tsconfig.esm.json
create mode 100644 packages/examples/.gitignore
create mode 100644 packages/examples/package.json
create mode 100644 packages/examples/src/simple.ts
create mode 100755 packages/examples/test.sh
create mode 100644 packages/examples/tsconfig.json
create mode 100644 packages/mini-loader/.gitignore
create mode 100644 packages/mini-loader/package.json
create mode 100644 packages/mini-loader/src/artifacts/artifacts.ts
create mode 100644 packages/mini-loader/src/index.ts
create mode 100644 packages/mini-loader/src/input/input.ts
create mode 100644 packages/mini-loader/src/logger/logger.ts
create mode 100644 packages/mini-loader/src/secrets/secrets.ts
create mode 100644 packages/mini-loader/src/utils.ts
create mode 100644 packages/mini-loader/tsconfig.json
create mode 100644 packages/runner/.gitignore
create mode 100644 packages/runner/package.json
create mode 100644 packages/runner/src/index.ts
create mode 100644 packages/runner/tsconfig.json
create mode 100644 packages/server/.gitignore
create mode 100755 packages/server/bin/index.mjs
create mode 100644 packages/server/package.json
create mode 100644 packages/server/src/auth/auth.ts
create mode 100644 packages/server/src/config/config.ts
create mode 100644 packages/server/src/database/database.ts
create mode 100644 packages/server/src/database/migrations/migration.init.ts
create mode 100644 packages/server/src/database/migrations/migrations.source.ts
create mode 100644 packages/server/src/index.ts
create mode 100644 packages/server/src/knex.d.ts
create mode 100644 packages/server/src/repos/artifacts/artifacts.schemas.ts
create mode 100644 packages/server/src/repos/artifacts/artifacts.ts
create mode 100644 packages/server/src/repos/loads/loads.schemas.ts
create mode 100644 packages/server/src/repos/loads/loads.ts
create mode 100644 packages/server/src/repos/logs/logs.schemas.ts
create mode 100644 packages/server/src/repos/logs/logs.ts
create mode 100644 packages/server/src/repos/repos.ts
create mode 100644 packages/server/src/repos/runs/runs.schemas.ts
create mode 100644 packages/server/src/repos/runs/runs.ts
create mode 100644 packages/server/src/repos/secrets/secrets.schemas.ts
create mode 100644 packages/server/src/repos/secrets/secrets.ts
create mode 100644 packages/server/src/router/router.artifacts.ts
create mode 100644 packages/server/src/router/router.loads.ts
create mode 100644 packages/server/src/router/router.logs.ts
create mode 100644 packages/server/src/router/router.runs.ts
create mode 100644 packages/server/src/router/router.secrets.ts
create mode 100644 packages/server/src/router/router.ts
create mode 100644 packages/server/src/router/router.utils.ts
create mode 100644 packages/server/src/runner/runner.instance.ts
create mode 100644 packages/server/src/runner/runner.ts
create mode 100644 packages/server/src/runtime/runtime.ts
create mode 100644 packages/server/src/server/server.ts
create mode 100644 packages/server/tsconfig.json
create mode 100644 pnpm-lock.yaml
create mode 100644 pnpm-workspace.yaml
create mode 100644 scripts/set-version.mjs
create mode 100644 tsconfig.json
create mode 100644 turbo.json
diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 0000000..cc0a85a
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1,5 @@
+/node_modules/
+/packages/*/node_modules/
+/packages/*/dist/
+/out/
+.turbo/
\ No newline at end of file
diff --git a/.eslintrc b/.eslintrc
new file mode 100644
index 0000000..f06d07e
--- /dev/null
+++ b/.eslintrc
@@ -0,0 +1,16 @@
+{
+ "extends": "@react-native-community",
+ "rules": {
+ "react/react-in-jsx-scope": 0,
+ "prettier/prettier": [
+ "error",
+ {
+ "singleQuote": true
+ }
+ ]
+ },
+ "ignorePatterns": [
+ "node_modules/",
+ "dist/"
+ ]
+}
\ No newline at end of file
diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
new file mode 100644
index 0000000..4072bd3
--- /dev/null
+++ b/.github/FUNDING.yml
@@ -0,0 +1 @@
+github: [morten-olsen]
diff --git a/.github/release-drafter-config.yml b/.github/release-drafter-config.yml
new file mode 100644
index 0000000..c8a1c56
--- /dev/null
+++ b/.github/release-drafter-config.yml
@@ -0,0 +1,53 @@
+name-template: '$RESOLVED_VERSION 🚀'
+tag-template: '$RESOLVED_VERSION'
+categories:
+ - title: '🚀 Features'
+ labels:
+ - 'feature'
+ - 'enhancement'
+ - title: '🐛 Bug Fixes'
+ labels:
+ - 'fix'
+ - 'bugfix'
+ - 'bug'
+ - title: '🧰 Maintenance'
+ label: 'chore'
+change-template: '- $TITLE @$AUTHOR (#$NUMBER)'
+change-title-escapes: '\<*_&' # You can add # and @ to disable mentions, and add ` to disable code blocks.
+version-resolver:
+ major:
+ labels:
+ - 'major'
+ minor:
+ labels:
+ - 'enhancement'
+ - 'feature'
+ patch:
+ labels:
+ - 'bug'
+ - 'chore'
+ - 'fix'
+ - 'bugfix'
+ default: patch
+autolabeler:
+ - label: 'chore'
+ files:
+ - '*.md'
+ branch:
+ - '/docs{0,1}\/.+/'
+ - label: 'bug'
+ title:
+ - '/fix/i'
+ body:
+ - '/fix/i'
+ - label: 'enhancement'
+ title:
+ - '/feature/i'
+ - '/feat/i'
+ body:
+ - '/feature/i'
+ - '/feat/i'
+template: |
+ ## Changes
+
+ $CHANGES
diff --git a/.github/workflows/auto-label.yml b/.github/workflows/auto-label.yml
new file mode 100644
index 0000000..e6236f1
--- /dev/null
+++ b/.github/workflows/auto-label.yml
@@ -0,0 +1,21 @@
+name: Auto Labeler
+on:
+ pull_request:
+ types: [opened, reopened, synchronize]
+
+permissions:
+ contents: read
+
+jobs:
+ auto-labeler:
+ permissions:
+ contents: write
+ pull-requests: write
+ runs-on: ubuntu-latest
+ steps:
+ - uses: release-drafter/release-drafter@v5
+ with:
+ config-name: release-drafter-config.yml
+ disable-releaser: true
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
new file mode 100644
index 0000000..4b6b7c7
--- /dev/null
+++ b/.github/workflows/release.yml
@@ -0,0 +1,123 @@
+name: Node.js Package
+
+on:
+ push:
+ pull_request:
+ types: [opened]
+ # release:
+ # types: [created]
+
+env:
+ NODE_CACHE: 'pnpm'
+ NODE_VERSION: '20.x'
+ NODE_SCOPE: '@bob-the-algorithm'
+ NPM_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ REGISTRY: ghcr.io
+ IMAGE_NAME: ${{ github.repository }}
+
+permissions:
+ contents: read
+ packages: read
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - run: corepack enable
+ - uses: actions/setup-node@v3
+ with:
+ cache: '${{ env.NODE_CACHE }}'
+ node-version: '${{ env.NODE_VERSION }}'
+ registry-url: '${{ env.NODE_REGISTRY_URL }}'
+ scope: '${{ env.NODE_SCOPE }}'
+
+ - run: pnpm install
+ - run: pnpm run test
+ - run: pnpm run build
+ - uses: actions/upload-artifact@v3
+ with:
+ name: lib
+ retention-days: 5
+ path: |
+ packages/*/dist
+ packages/*/package.json
+ package.json
+ README.md
+
+ update-release-draft:
+ if: github.ref == 'refs/heads/main'
+ needs: build
+ permissions:
+ contents: write
+ pull-requests: write
+ packages: write
+ runs-on: ubuntu-latest
+ steps:
+ - uses: release-drafter/release-drafter@v5
+ with:
+ config-name: release-drafter-config.yml
+ publish: true
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+ release-docker:
+ if: github.ref == 'refs/heads/main'
+ runs-on: ubuntu-latest
+ needs: [build, update-release-draft]
+ permissions:
+ contents: read
+ packages: write
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+ - name: Log in to the Container registry
+ uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
+ with:
+ registry: ${{ env.REGISTRY }}
+ username: ${{ github.actor }}
+ password: ${{ secrets.GITHUB_TOKEN }}
+ - name: Extract metadata (tags, labels) for Docker
+ id: meta
+ uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7
+ with:
+ images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
+ - name: Build and push Docker image
+ uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4
+ with:
+ context: .
+ file: ./docker/Dockerfile
+ push: true
+ tags: ${{ steps.meta.outputs.tags }}
+ labels: ${{ steps.meta.outputs.labels }}
+
+ # release-npm:
+ # if: github.ref == 'refs/heads/main'
+ # runs-on: ubuntu-latest
+ # needs: [build, update-release-draft]
+ # permissions:
+ # contents: read
+ # packages: write
+ # steps:
+ # - uses: actions/checkout@v3
+ # with:
+ # fetch-depth: 0
+ # - run: corepack enable
+ # - uses: actions/setup-node@v3
+ # with:
+ # cache: '${{ env.NODE_CACHE }}'
+ # node-version: '${{ env.NODE_VERSION }}'
+ # scope: '${{ env.NODE_SCOPE }}'
+ # - uses: actions/download-artifact@v3
+ # with:
+ # name: lib
+ # path: ./
+ # - run: |
+ # pnpm config set //registry.npmjs.org/:_authToken ${NPM_TOKEN}
+ # pnpm install
+ # git config user.name "Github Actions Bot"
+ # git config user.email "<>"
+ # node scripts/set-version.ts $(git describe --tag --abbrev=0)
+ # pnpm publish -r --publish-branch main --access public --no-git-checks
+ # env:
+ # NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..a20be92
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+/node_modules/
+.turbo/
+/.pnpm-store/
+/out/
\ No newline at end of file
diff --git a/.npmrc b/.npmrc
new file mode 100644
index 0000000..f747863
--- /dev/null
+++ b/.npmrc
@@ -0,0 +1 @@
+store-dir=.pnpm-store
\ No newline at end of file
diff --git a/.prettierrc b/.prettierrc
new file mode 100644
index 0000000..34d0d8e
--- /dev/null
+++ b/.prettierrc
@@ -0,0 +1,18 @@
+{
+ "arrowParens": "always",
+ "bracketSpacing": true,
+ "htmlWhitespaceSensitivity": "css",
+ "insertPragma": false,
+ "bracketSameLine": false,
+ "jsxSingleQuote": false,
+ "printWidth": 120,
+ "proseWrap": "preserve",
+ "quoteProps": "as-needed",
+ "requirePragma": false,
+ "semi": true,
+ "singleQuote": true,
+ "tabWidth": 2,
+ "trailingComma": "all",
+ "useTabs": false,
+ "singleAttributePerLine": false
+}
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..23338f6
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,675 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc.
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+
+ Copyright (C)
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ Copyright (C)
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+.
+:w
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..fbba64d
--- /dev/null
+++ b/README.md
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+# Welcome to Mini Loader! 🌐
+
+Welcome to mini loader, a lightweight, Docker-based server solution for managing and executing workloads with ease. Designed for developers, small teams, and anyone in need of a simple yet powerful tool for running tasks, hosting API servers, or scheduling routine jobs.
+
+## Features
+
+- **Ease of Use**: Simple CLI for interacting with the server.
+- **Flexibility**: Run one-off tasks, host small API servers, or schedule jobs using cron syntax.
+- **Docker Integration**: Easily deployable as a Docker container.
+- **Automatic Dependency Handling**: Auto-download of required packages.
+- **Task Scheduling**: Built-in support for cron-like job scheduling.
+- **HTTP Gateway**: Expose a HTTP server from your workloads
+
+Also see [anti-features and limitations](./docs/anti-features.md)
+
+## Quick Start
+
+Get up and running with mini loader in just a few steps:
+
+1. **Install the CLI**: `npm install -g @morten-olsen/mini-loader-cli`
+2. **Deploy the Server**: `docker run -p 4500:4500 -n mini-loader ghcr.io/morten-olsen/mini-loader:main`.
+3. **Push Your First Load**: `mini-loader loads push script.mjs -r -i first`
+3. **See the logs**: `mini-loader logs ls -l first`
+
+For a detailed guide on getting started, please refer to the [Getting Started Tutorial](./docs/getting-started.md).
+
+## Support and Contributions
+
+If you encounter any issues or would like to contribute to the project, please check out:
+
+- [Issue Tracker](https://github.com/morten-olsen/mini-loader/issues)
+- [Contribution Guidelines](./CONTRIBUTING.md)
+
+## License
+
+mini loader is open-source software licensed under the [GPL-3 License](./LICENSE).
+
+## Let's Get Started!
+
+Dive into the world of simplified workload management with mini loader. Start with our [Getting Started Tutorial](./docs/getting-started.md) and unleash the full potential of your tasks and applications!
diff --git a/assets/logo.png b/assets/logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..fc28a6cf1cc69f25fa3ed8b323421d78343f5edd
GIT binary patch
literal 1319760
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ǿ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