https://github.com/mashiike/ichigeki
tool for container age one time script inspired by perl's Script::Ichigeki
https://github.com/mashiike/ichigeki
go
Last synced: 3 months ago
JSON representation
tool for container age one time script inspired by perl's Script::Ichigeki
- Host: GitHub
- URL: https://github.com/mashiike/ichigeki
- Owner: mashiike
- License: mit
- Created: 2022-06-01T22:46:56.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2023-06-19T21:05:25.000Z (almost 2 years ago)
- Last Synced: 2024-06-21T10:55:55.229Z (11 months ago)
- Topics: go
- Language: Go
- Homepage:
- Size: 63.5 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# ichigeki
[](https://godoc.org/github.com/mashiike/ichigeki)


[](https://goreportcard.com/report/mashiike/ichigeki)
[](https://github.com/mashiike/ichigeki/blob/master/LICENSE)ichigeki is the util tool for one time script for mission critical (especially for preventing rerunning it).
this tool inspired by perl's [Script::Ichigeki](https://github.com/Songmu/p5-Script-Ichigeki)## Usage as a CLI
for ECS Task. log output to S3 Bucket.
For example, for a one time script that needs to be executed on 2022-06-01
```shell
$ ichigeki --s3-url-prefix s3://ichigeki-example-com/logs/ --exec-date 2022-06-01 --no-confirm-dialog -- your_command
```or with default config `~/.config/ichigeki/default.toml`.
```toml
confirm_dialog = false
default_name_template = "{{ .Name }}{{ if gt (len .Args) 1}}-{{ .Args | hash }}{{ end }}"[s3]
bucket = "ichigeki-example-com"
object_prefix = "logs/"
``````shell
$ ichigeki --exec-date 2022-06-01 -- your_command
```### ICHIGEKI_EXECUTION_ENVs
If you want to check whether the command is started using ichigeki on the side of the command to be started, you can check the environment variable named ICHIGEKI_EXECUTION_ENV. If version information is stored, it is invoked via ichigeki command.
sample.sh
```shell
#!/bin/bashecho $ICHIGEKI_EXECUTION_ENV
echo $ICHIGEKI_EXECUTION_NAME
echo $ICHIGEKI_EXECUTION_DATE
``````shell
$ ichigeki --s3-url-prefix s3://ichigeki-example-com/logs/ -- ./sample.sh
[info] log output to `s3://ichigeki-example-com/logs/sample.sh.log`
ichigeki v0.3.0
```### default_name_template in `~/.config/ichigeki/default.toml`
The default configuration file provides a template for dynamically determining the ichigeki name.
This dynamic ichigeki name mechanism works only if you do not explicitly specify `-name` in the options
This template follows the Go template notation [text/template](https://pkg.go.dev/text/template)The following data is passed to the template:
- `.Name` : Default name if template is not specified
- `.ExecDate`: `-exec-date` or the value of the execution date. format(2016-01-02)
- `.Today`: the value of the execution date. format(2016-01-02)
- `.Args`: A space-separated array of the commands passed. (type []string)The following custom functions are passed:
- `sha256` : Given a string or []string, compute the hexadecimal notation of sha256 hash
- `hash` : First 7 characters of the hexadecimal notation of the sha256 hash
- `arg` : Value of the specified index of .Args. If not present, it will be an empty string. (sample {{ arg 1 }})
- `last_arg` : Last element of .Args
- `env` : Refers to the environment variable at the start of execution. If not set, an empty character will be returned.
- `must_env` : Refers to the environment variable at the start of execution. If it is not set, it will panic.For example: `default_name_template` = `"{{ .Name }}{{ if gt (len .Args) 1}}-{{ .Args | hash }}{{ end }}"`
`$ ichigeki -- ./sample.sh` => `sample.sh`
`$ ichigeki -- go run cmd/migration/. --debug` => `go-4575533`### Install
#### Homebrew (macOS and Linux)```console
$ brew install mashiike/tap/ichigeki
```#### Binary packages
[Releases](https://github.com/mashiike/ichigeki/releases)
### Options
```shell
ichigeki [options] -- (commands)
-dir string
log destination for s3
-exec-date string
scheduled execution date
-name string
ichigeki name
-no-confirm-dialog
do confirm
-s3-url-prefix string
log destination for s3
```
## Usage as a libraryfor example:
```go
package mainimport (
"fmt"
"log""github.com/mashiike/ichigeki"
"github.com/mashiike/ichigeki/s3log"
)func main() {
ld, err := s3log.New(context.Background(), &s3log.Config{
Bucket: "ichigeki-example-come",
ObjectPrefix: "logs/",
})
if err != nil {
log.Fatal("s3 log destination:", err)
}
h := &ichigeki.Hissatsu{
Name: "hogehoge",
LogDestination: ld,
ConfirmDialog: ichigeki.Bool(true),
Script: func(_ context.Context, stdout io.Writer, stderr io.Writer) error {
fmt.Fprintln(stdout, "this message out to stdout")
fmt.Fprintln(stderr, "this message out to stderr")
return nil
},
}if err := h.Execute(); err != nil {
log.Fatal(err)
}
}
```## LICENSE
MIT License
Copyright (c) 2022 IKEDA Masashi