πŸ›³ Continuous deployment agent

Related tags

Productivity subilo
Overview

Subilo

Rust

πŸ›³ Deployment automation agent

Subilo is a tool to setup continuous deployments for applications running on machines with no external integrations, like IoT devices and VPSs.

How it works

The Subilo agent is a small server that lives on your application's machine and listens for secure HTTP webhooks. These webhooks have information about what application to deploy matching the Subilo configuration file (.subilorc). The file also defines what steps should be taken to successfully deploy an application, for example: git pull or pull the latest Docker image, restart the application and send a notification.

Basic example

Configuration (.subilorc):

[[projects]]
name = "foo-app"
path = "~/apps/foo-app"
commands = [
  "git pull",
  "./restart-serever.sh",
  "echo 'Pulled changes and restarted server successfully'",
]

Webhook:

This webhook is usually sent from a CI run after the tests passed.

curl -X POST 'https://subilo.yourdomain.com/webhook' \
  -H 'Authorization: Bearer ********' \
  -H 'Content-Type: application/json' \
  -d '{ "name": "foo-app" }'

Status and logs of these deployments can then be seen in the Dashboard using the URL and the authentication token provided by the Subilo agent.

Install

Install script

curl -s -L https://raw.githubusercontent.com/huemul/subilo/master/install.sh | bash

This command runs the install script. The script downloads the latest Subilo release and attempts to add the Subilo bin path to the $PATH in the correct profile file (~/.profile, ~/.bashrc, ~/.bash_profile, ~/.zshrc or ~/.config/fish/config.fish)

Cargo

cargo install subilo

Manually

Download the latest released binary and add executable permissions:

wget -O subilo "https://github.com/huemul/subilo/releases/download/v0.1.2/subilo-x86-64-linux"
chmod +x subilo

Use

Command line interface

Now that Subilo is available, the help subcommand can be run to display the CLI information:

subilo --help
subilo 0.0.1
Tiny deployment agent

USAGE:
    subilo [FLAGS] [OPTIONS] <SUBCOMMAND>

FLAGS:
    -h, --help       Prints help information
    -V, --version    Prints version information
    -v, --verbose    Makes Subilo verbose. Useful for debugging and seeing what's going on "under the hood"

OPTIONS:
    -s, --secret <secret>    Secret to generate and authenticate the token

SUBCOMMANDS:
    help     Prints this message or the help of the given subcommand(s)
    serve    Start subilo agent
    token    Create a token based on the secret to authorize agent connections

Configuration

Create a .subilorc file with the required configuration. An example can be found here.

Start

To start the agent the serve command should be used specifying the authentication secret, the port (optional), config file and logs directory (optional).

Example:

subilo --secret super-secret serve --port 8089 --config /path/to/.subilorc

NOTE: at the moment, the API to display the deployment jobs status and logs is based on these logs files.

Authentication

To get access to the agent endpoints, create an authentication token using the token command in the CLI.

Token with write permissions:

This token is used to access the POST /webhook endpoint and deploy an application using the predefined commands in .subilorc.

Example:

subilo --secret "super-secret" token --permissions "job:write"

Token with only read permissions:

By default, the token only has read parmissions. In other words, only access the logs and information endpoints. These endpoints can be used to see the status and logs of the deployment jobs. They are what powers the subilo.io website.

Example:

subilo --secret "super-secret" token

Systemd configuration (Optional)

We recommend running Subilo with systemd to easily manage it. But that's completely optional, you may run it however suits you.

Create a systemd service file (/etc/systemd/system/subilo.service) with the following attributes:

[Unit]
Description=Subilo

[Service]
ExecStart=/path/to/subilo -s super-secret-secret serve -l /path/to/subilo-logs -p 8080 -c /path/to/.subilorc

[Install]
WantedBy=multi-user.target

Then enable and start Subilo service:

# Might require sudo
systemctl enable /etc/systemd/system/subilo.service
systemctl start subilo

To read logs and check status from systemctl, the following commands can be used:

systemctl status subilo
journalctl -u subilo -b

Setup deployment webhooks

Once Subilo is running and exposed to the internet, deployment jobs can be triggered by a POST request to the /webhook endpoint wiht the application's name on the payload.

curl -X POST 'https://subilo.yourdomain.com/webhook' \
  -H 'Authorization: Bearer ********' \
  -H 'Content-Type: application/json' \
  -d '{ "name": "foo-app" }'

The name is matched against the .subilorc configuration file and the specified commands are run to deploy the app.

CI

Usually, this webhook is trigger from a CI run, so after the application's tests passed, it can be safely deployed. Store the token as a secret in the CI configuration and add a curl command to POST to the /webhook endpoint to trigger a deploy.

Development

Run

cargo run

# Watch mode
cargo watch -x run

# Setting CLI options
cargo run -- --port 9090 --logs-dir ./logs

Test

cargo test

# Watch mode
cargo watch -x test

LICENSE

MIT License Β© Christian Gill and Nicoals Del Valle

Comments
  • Respond to ping on webhook setup

    Respond to ping on webhook setup

    GitHub sends a ping event on webhook setup, we should respond with 200 for the webhook to be suxcesfully configured

    https://developer.github.com/webhooks/event-payloads/#ping

    Header to match:

    X-Github-Event: ping
    
    opened by gillchristian 3
  • build(deps): Bump actix-web-httpauth from 0.4.1 to 0.4.2

    build(deps): Bump actix-web-httpauth from 0.4.1 to 0.4.2

    Bumps actix-web-httpauth from 0.4.1 to 0.4.2.

    Release notes

    Sourced from actix-web-httpauth's releases.

    actix-web-httpauth v0.4.2

    [0.4.2] - 2020-07-08

    • Update the base64 dependency to 0.12
    • AuthenticationError's status code is preserved when converting to a ResponseError
    • Minimize futures dependency
    • Fix panic on AuthenticationMiddleware #69

    #69: actix/actix-web-httpauth#69

    Commits
    • 39fe80d Merge pull request #77 from JohnTitor/new-httpauth
    • 61da910 httpauth: Bump up to 0.4.2
    • 6d3e4c9 Merge pull request #74 from JohnTitor/protobuf-alpha
    • 9b57313 Merge pull request #73 from JohnTitor/clippy-fixes
    • f920479 protobuf: Update to 0.6.0-alpha.1
    • bd963fb Fix clippy warnings
    • 6b839f0 Merge pull request #72 from lucab/ups/cors-docs
    • f4d7526 Merge pull request #76 from JohnTitor/fix-tarpaulin
    • 6e132d9 Use tarpaulin 0.13 to avoid failure
    • 95041b8 actix-cors: cosmetic and minor fixes
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • Update README.md, add LICENSE and small fixes

    Update README.md, add LICENSE and small fixes

    • Updated README with a bunch of small fixes
    • Added MIT License
    • ~~Renamed "project" to "app" (I realized that "project" is a kinda the way we refer to applications, but that one makes more sense outside of our conversations :sweat_smile:)~~
    • Make the default token to have only read permissions and for write ones they have to be specified in the CLI
    opened by gillchristian 1
  • Discussion

    Discussion

    Webhook should resolve the request instantly and then run the job (eg. what if one of the commands is sleep 60). We should probably have some sort of queue that process one job (per project?) at a time. Queue should also drop all the other jobs from the same project and just run the last one.

    About the logs and history of jobs. I guess we should write the logs to some specific file, maybe create a file per job (eg. give the jobs some id).

    But then, what if we keep track of (say the last 5?) jobs and allow to view them in a UI? For the first iteration we don't need an actual UI, could be just JSON. There we could see all the jobs: status, logs, some metadata as well. Eventually (v10 or something) we could even stream the logs to see the job running live 😏

    About the environment. I'm thinking we should clear the env vars (Command::new("ls").env_clear()) so the job runs on a clear state. Thresh could also set some env vars (eg. what job is being run, etc). And we could allow loading an .env file and also listing some env vars (in the config file) that should not be cleared.

    opened by gillchristian 1
  • build(deps): Bump clap from 2.33.2 to 2.33.3

    build(deps): Bump clap from 2.33.2 to 2.33.3

    Bumps clap from 2.33.2 to 2.33.3.

    Release notes

    Sourced from clap's releases.

    v2.33.3

    Improvements

    • Suppress deprecation warnings when using crate_* macros.
    Changelog

    Sourced from clap's changelog.

    v2.33.3 (2020-08-13)

    Improvements

    • Suppress deprecation warnings when using crate_* macros.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • build(deps): Bump chrono from 0.4.13 to 0.4.15

    build(deps): Bump chrono from 0.4.13 to 0.4.15

    ⚠️ Dependabot is rebasing this PR ⚠️

    If you make any changes to it yourself then they will take precedence over the rebase.


    Bumps chrono from 0.4.13 to 0.4.15.

    Changelog

    Sourced from chrono's changelog.

    0.4.15

    Fixes

    • Correct usage of vec in specific feature combinations (@quodlibetor)

    0.4.14 YANKED

    Features

    • Add day and week iterators for NaiveDate (@gnzlbg & @robyoung)
    • Add a Month enum (@hhamana)
    • Add locales. All format functions can now use locales, see the documentation for the unstable-locales feature.
    • Fix Local.from_local_datetime method for wasm

    Improvements

    • Added MIN and MAX values for NaiveTime, NaiveDateTime and DateTime<Utc>.
    Commits
    • 7e0c0de Release 0.4.15
    • af1c2c1 Merge pull request #470 from quodlibetor/run-compile-check-on-feature-combina...
    • 65e6dbd Get rid of unnecessary Vec in default path of format_inner
    • cb79089 Test workflow changes when workflows change
    • 58819de Run cargo check on more feature combinations
    • 47fa56c Document that 0.4.14 is yanked (#469)
    • c1c2f7b Merge pull request #467 from quodlibetor/rel-0.4.14
    • db5b217 Release 0.4.14
    • 6426498 Always test release branches
    • c364de3 docs: fix link to cargo docs (#464)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • build(deps): Bump serde from 1.0.114 to 1.0.115

    build(deps): Bump serde from 1.0.114 to 1.0.115

    Bumps serde from 1.0.114 to 1.0.115.

    Release notes

    Sourced from serde's releases.

    v1.0.115

    • Support #[serde(flatten)] on a field whose type is a type parameter and concrete type is () (#1873)
    Commits
    • 2ef60b6 Release 1.0.115
    • e6f086d Merge pull request #1874 from dtolnay/flatunit
    • bf76f50 Support deserializing flattened unit
    • ba07075 Support serializing flattened unit
    • 26186bd Add test for flattened unit
    • 53b9871 Quote no longer requires high recursion
    • f8787c3 Suppress match_like_matches_macro clippy lint
    • 3022064 Suppress option_if_let_else clippy pedantic lint
    • 9e140a2 Tweak yaml format blurb
    • 24e6acb Drop 'help or discussion' issue template
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • build(deps): Bump async-std from 1.6.2 to 1.6.3

    build(deps): Bump async-std from 1.6.2 to 1.6.3

    Bumps async-std from 1.6.2 to 1.6.3.

    Release notes

    Sourced from async-std's releases.

    v1.6.3

    Added

    Changed

    • Switched from smol to individual executor parts. (#836)
    • Replaced internal Mutex implementation with async-mutex. (#822)

    Fixed

    • Added missing Send guards to Stream::collect. (#665)
    Changelog

    Sourced from async-std's changelog.

    [1.6.3] - 2020-07-31

    Added

    Changed

    • Switched from smol to individual executor parts. (#836)
    • Replaced internal Mutex implementation with async-mutex. (#822)

    Fixed

    • Added missing Send guards to Stream::collect. (#665)
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • build(deps): Bump clap from 2.33.1 to 2.33.2

    build(deps): Bump clap from 2.33.1 to 2.33.2

    Bumps clap from 2.33.1 to 2.33.2.

    Release notes

    Sourced from clap's releases.

    v2.33.2

    v2.33.2 (2020-08-5)

    Documentation

    • Fixed links to 2.x examples. Now they point to the right place.
    Changelog

    Sourced from clap's changelog.

    v2.33.2 (2020-08-5)

    Documentation

    • Fixed links to 2.x examples. Now they point to the right place.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • build(deps): Bump log from 0.4.8 to 0.4.11

    build(deps): Bump log from 0.4.8 to 0.4.11

    Bumps log from 0.4.8 to 0.4.11.

    Changelog

    Sourced from log's changelog.

    [0.4.11] - 2020-07-09

    New

    • Support coercing structured values into concrete types.
    • Reference the win_dbg_logger in the readme.

    Fixed

    • Updates a few deprecated items used internally.
    • Fixed issues in docs and expands sections.
    • Show the correct build badge in the readme.
    • Fix up a possible inference breakage with structured value errors.
    • Respect formatting flags in structured value formatting.

    [0.4.10] - 2019-12-16 (yanked)

    Fixed

    • Fixed the log! macros so they work in expression context (this regressed in 0.4.9, which has been yanked).

    [0.4.9] - 2019-12-12 (yanked)

    Minimum Supported Rust Version

    This release bumps the minimum compiler version to 1.31.0. This was mainly needed for cfg-if, but between 1.16.0 and 1.31.0 there are a lot of language and library improvements we now take advantage of.

    New

    • Unstable support for capturing key-value pairs in a record using the log! macros

    Improved

    • Better documentation for max level filters.
    • Internal updates to line up with bumped MSRV
    Commits
    • aa4c037 Merge pull request #404 from KodrAus/cargo/0.4.11
    • 21715ba just don't do self updates in ci
    • ee4bc80 prepare for 0.4.11 release
    • 813b6ce Merge pull request #401 from brettcannon/patch-1
    • 5821b8a Fix a grammatical mistake
    • 9ae6778 Merge pull request #400 from KodrAus/fix/value-fmt
    • c89a4a1 bump sval to 0.5.2 for fmt fixes
    • 43d69c1 remove unneeded io::Error From impl
    • ee8c6cd respect fmt trait and flags in Value
    • c5c8e48 Merge pull request #398 from dtolnay/ra_hir_def
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • build(deps): Bump serde_json from 1.0.56 to 1.0.57

    build(deps): Bump serde_json from 1.0.56 to 1.0.57

    Bumps serde_json from 1.0.56 to 1.0.57.

    Release notes

    Sourced from serde_json's releases.

    v1.0.57

    • Allow serde_json::Deserializer to be instantiated without consuming the serde_json::​de::Read impl (#684)
    Commits
    • 4354fc3 Release 1.0.57
    • a5b1f59 Clean up rustdoc representation of the &mut R Read impl
    • 7b86e66 Move Read &mut impl after other Read impls
    • a1e006a Merge pull request 684 from tinou98/read-mut
    • 4003c50 Add Read implementation for &mut Read
    • fdc177d Raise preserve_order required Rust version to 1.32
    • b102478 Suppress match_like_matches_macro clippy lint
    • See full diff in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Proposal to change the log file name

    Proposal to change the log file name

    The current log file name is: test_2020-08-08--00-48-52.log and is created using this function:

    pub fn create_job_name(repository: &str) -> String {
        let repository = repository.replace("/", "-");
        let now = Utc::now().format("%Y-%m-%d--%H-%M-%S").to_string();
        format!("{}_{}", repository, now)
    }
    

    There was not research on best patterns to name a log file and what would be best for Subilo, so I'm creating this issue to track possible new formats.

    enhancement 
    opened by ndelvalle 0
  • Project / Job Environment variables & secrets

    Project / Job Environment variables & secrets

    Most CI systems provide environment variables related to the job being run and the project (eg. the current commit). They also provide a way to provide secrets available as environment variables to the commands running on the particular job.

    This is easily solved by adding some dotenv file in the project's directory and not requiring any solution from Subilo's side (for secrets at least)

    With the idea proposed in #59 of being able to add new projects through the client UI having the ability to provide secrets and env vars through some Subilo solution would be great. Otherwise it would still be necessary to ssh in the machine running the Agent to add a new project

    agent client 
    opened by gillchristian 0
  • Configuration as code

    Configuration as code

    Currently the configuration for each project is in a centralized place (.subilorc).

    Most modern CI systems (if not all) support the configuration being part of the code.

    With the model of "agent" that Subilo has going to that direction proposes some challenges that need to be solved.

    Running the latest version

    git pull should be the first step always and then we'd need to read the (potentially new) commands that need to run for the particular project.

    We could default to git pull being the "before" part of running a job for projects with configuration as code or we could make that step configurable (eg. if for some other reason the project does not fetch code from a git repository)

    Config conflicts

    There could be conflicts between global config and project. Project config should take precedence but it would be better to find a solution that doesn't allow conflicts to happen.

    Adding projects

    Registering a project would still require having to ssh into the machine running the agent and make changes to .subilorc.

    Enabling editing the file through the UI could be a nice improvement. Specially if Subilo could take care of the initial setup (ie. cloning the project for the first time).

    Another option could be the have a directory where any subdirectory there that has a .subilofile would considered a project. I'm not a fan of this approach since there wouldn't be a source of truth of what projects are added to the agent. But is an approach that many CI systems use.

    agent client 
    opened by gillchristian 0
  • Improve token permissions parsing

    Improve token permissions parsing

    There are a few things to improve in the token permission(s) parsing now.

    • We default to JobWrite but docs state we don't (I think this is good expected behavior)
    • We ignore failure to parse any permissions
    • We use "serde_json" meaning we need to do some formatting of the data in order to parse it as valid JSON
    • As we add more permissions in the token it will probably make sense to add a better documentation for them in the CLI
    agent 
    opened by gillchristian 0
  • systemd file won't start on boot... or will it?

    systemd file won't start on boot... or will it?

    I think the systemd file from the readme is missing something like:

    [Install]
    WantedBy=multi-user.target
    

    otherwise subilo won't be started if the VPS is rebooted.

    Disclaimer: I have no idea what I'm talking about.

    documentation help wanted 
    opened by fvictorio 0
  • cargo fmt --all requires nightly

    cargo fmt --all requires nightly

    ➜ thresh git:(master) cargo fmt --all Warning: can't set indent_style = Block, unstable features are only available in nightly channel. Warning: can't set wrap_comments = true, unstable features are only available in nightly channel. Warning: can't set fn_single_line = true, unstable features are only available in nightly channel. Warning: can't set brace_style = SameLineWhere, unstable features are only available in nightly channel. Warning: can't set control_brace_style = AlwaysSameLine, unstable features are only available in nightly channel.

    I think we should update the implementation to avoid unstable features.

    enhancement help wanted 
    opened by ndelvalle 0
Releases(v0.2.1)
Continuous Delivery for Declarative Kubernetes, Serverless and Infrastructure Applications

Continuous Delivery for Declarative Kubernetes, Serverless and Infrastructure Applications Explore PipeCD docs Β» Overview PipeCD provides a unified co

PipeCD 650 Dec 29, 2022
Containerize your development and continuous integration environments. πŸ₯‚

Toast ?? Toast is a tool for doing work in containers. You define tasks in a YAML file called a toastfile, and Toast runs them in a containerized envi

Stephan Boyer 1.4k Dec 27, 2022
Rust-lang Continuous Wavelet Transform(CWT) library inspired by fCWT.

fastcwt Rust-lang Continuous Wavelet Transform(CWT) library inspired by fCWT. This crate is a direct translation of fCWT Library written in C++ by Art

null 3 May 2, 2023
Continuous runtime observablity SDKs to monitor WebAssembly code.

Observe Observe is an observability SDK for WebAssembly. At the moment we support wasmtime hosts and we output opentelemetry data to stdout. We plan t

Dylibso 4 Jun 8, 2023
A Framework for Production-Ready Continuous Machine Learning

CML "Domain generalization is dead, Continuous Machine Learning lives forever." β€”β€” an iKun CML is a framework for production-ready continuous machine

Yu Sun 3 Aug 1, 2023
βšͺ️ `wasm-pack build` executed in remote deployment

rsw-node wasm-pack build executed in remote deployment, use with vite-plugin-rsw. Pre-installed rust nodejs wasm-pack: npm install -g wasm-pack vite-p

Len C... 10 Jul 6, 2022
⚑ Insanely fast, 🌟 Feature-rich searching. lnx is the adaptable deployment of the tantivy search engine you never knew you wanted. Standing on the shoulders of giants.

✨ Feature Rich | ⚑ Insanely Fast An ultra-fast, adaptable deployment of the tantivy search engine via REST. ?? Standing On The Shoulders of Giants lnx

lnx 679 Jan 1, 2023
⚑ Insanely fast, 🌟 Feature-rich searching. lnx is the adaptable deployment of the tantivy search engine you never knew you wanted. Standing on the shoulders of giants.

✨ Feature Rich | ⚑ Insanely Fast An ultra-fast, adaptable deployment of the tantivy search engine via REST. ?? Standing On The Shoulders of Giants lnx

lnx 0 Apr 25, 2022
A cli tool to automate the building and deployment of Bitcoin nodes

ℹ️ Automate Bitcoin builds, speed up deployment Shran is an open-source cli tool being developed to address the needs of DMG Blockchain Solutions. It

Matt Williams 1 Oct 20, 2022
An infrastructure-as-code and deployment tool for Roblox.

Rocat ?? An infrastructure-as-code and deployment tool for Roblox. ⚠ Please note that this is an early release and the API is unstable. Releases follo

Blake Mealey 45 Dec 29, 2022
An infrastructure-as-code and deployment tool for Roblox.

Mantle ?? An infrastructure-as-code and deployment tool for Roblox. ⚠ Please note that this is an early release and the API is unstable. Releases foll

Blake Mealey 44 Dec 22, 2022
Isolates Jibri pods from their Deployment when they start recording or livestreaming, and cleans them up when they finish.

jibri-pod-controller: A tool for managing the scaling of large Jibri deployments in Kubernetes. When managing a large Jibri deployment, you usually wa

AVStack 9 Nov 18, 2022
Qovery Engine is an open-source abstraction layer library that turns easy apps deployment on AWS, GCP, Azure, and other Cloud providers in just a few minutes.

Qovery Engine is an open-source abstraction layer library that turns easy apps deployment on AWS, GCP, Azure, and other Cloud providers in just a few minutes.

Qovery 1.9k Jan 4, 2023
Lightweight tool for simple deployment (server+client)

deploy Lightweight tool for simple deployment (server+client) Usage You first need a key value pair: deploy generate-keys Public-Key: Used on the serv

Jan-Mirko Otter 0 Dec 27, 2021
H2O Open Source Kubernetes operator and a command-line tool to ease deployment (and undeployment) of H2O open-source machine learning platform H2O-3 to Kubernetes.

H2O Kubernetes Repository with official tools to aid the deployment of H2O Machine Learning platform to Kubernetes. There are two essential tools to b

H2O.ai 16 Nov 12, 2022
Fast, accessible and privacy friendly AI deployment

Mithril Security - BlindAI Website | LinkedIn | Blog | Twitter | Documentation | Discord Fast, accessible and privacy friendly AI deployment ?? ?? Bli

Mithril Security 312 Dec 23, 2022
A Rust command line tool to simplify embedded development and deployment.

Bobbin-CLI bobbin-cli is a tool designed to make it easy to build, deploy, test and debug embedded devices using a unified CLI. bobbin-cli understands

Bobbin 110 Dec 25, 2022
Habitat is open source software that creates platform-independent build artifacts and provides built-in deployment and management capabilities.

Habitat is open source software that creates platform-independent build artifacts and provides built-in deployment and management capabilities. The go

Habitat 2.4k Dec 27, 2022
An opinionated, monolithic template for Bevy with cross-platform CI/CD, native + WASM launchers, and managed cross-platform deployment.

??️ Bevy Shell - Template An opinionated, monolithic template for Bevy with cross-platform CI/CD, native + WASM launchers, and managed cross-platform

Kurbos 218 Dec 30, 2022
πŸ—„οΈ A simple (and safe!) to consume history of Client and Studio deployment versions.

??️ Roblox Version Archive A simple (and safe!) to consume history of Client and Studio deployment versions. About Parsing Roblox's DeployHistory form

Brooke Rhodes 4 Dec 28, 2022