otsukai

command module
v0.0.5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 6, 2024 License: MIT Imports: 8 Imported by: 0

README

Otsukai

Otsukai: Simple, and Easy to use deployment application for your servers.

Installation

From Source
$ git clone https://github.com/mika-f/otsukai
$ cd otsukai
$ go install
From Binary

Download the binary from the releases page and place it in your $PATH.

Usage

At the first time, you need to create a configuration file.

NOTE The deployment recipe has subset of Ruby, but not run as Ruby.

# default target host, with user
set target: { host: "yuuka.natsuneko.net", user: "ubuntu" }

task :deploy do
  if changed(path: "/path/to/docker-compose.yml", from: :last_commit)
    # run with sudo
    run_with :sudo do
      # run docker compose down on remote
      run remote: "docker compose down -f /remote/path/to/docker-compose.yml"

      # copy file/directory from local (/path/to/docker-compose.yml) to remote (/home/ubuntu/docker-compose.yml)
      copy to: :remote, local: "/path/to/docker-compose.yml", remote: "/home/ubuntu/docker-compose.yml"

      # run docker compose on remote
      run remote: "docker compose up -d -f /remote/path/to/docker-compose.yml"
    end
  end
end

Then, you can deploy your application by running the following command.

# check syntax before deploy
$ otsukai test --recipe examples/docker-compose/otsukai.rb

# deploy
$ otsukai run --recipe examples/docker-compose/otsukai.rb

# deploy (dry-run)
$ otsukai run --recipe examples/docker-compose/otsukai.rb --dry-run

Functions

set (local func)

Set a variable value. Example:

set remote: { host: "yuuka.natsuneko.net", user: "ubuntu" }
set default: :deploy
set app_root: "/usr/local/"

The following variables are specialized:

  • remote: { host: string, user: string }
  • timeout: number (default: 10)
task (local func)

Define a task with name. Example:

# define `deploy` task
task :deploy do
  # ...
end

# define `rollback` task
task :rollback do
  # ...
end
changed (local func)

Check the specified path has changed from specified refs.

changed(path: "/path/to/file", commit_from: :last_commit, commit_to: :head) # returns bool

the commit_from supports the following args:

  • :last_commit : the specified file is changed in last commit
  • :fetch_commit : the specified file is changed in remote fetched commit (ref: git-rev-parse#FETCH_HEAD)
  • :before_merge : the specified file is changed in before merged commit (ref: git-rev-parse#ORIG_HEAD)
  • :after_merge : the specified file is changed in merged commit(s) (ref: git-rev-parse#MERGE_HEAD)

the commit_to supports the following args:

  • Not Yet Implemented
copy (local / remote func)

Copy file/directory between from local/remote to remote/local.

copy(to: :remote, local: "/path/to/file", remote: "/path/to/dest")
copy(to: :local, remote: "/path/to/file", local: "/path/to/dest", is_dir: true)

the to supports the following args:

  • :remote : copy from local to remote
  • :local : copy from remote to local

the local and remote is path of the file or directory. if the directory is specified, copy recursively.

the is_dir is required for to: :local, and default is false.

run (local / remote func)

Run commands in local/remote.

run(remote: "echo 'Hello, World'")
run(local:  "echo 'Hello, World'")
task_success (local func)

Return true when the last task is successful.

task :deploy do
  # ...
end

hook after: :deploy do
  if task_success
    run # ...
  end
end

License

This project is licensed under the MIT License - see the LICENSE file for details.

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL