mirror of
https://github.com/gabrie30/ghorg.git
synced 2025-08-06 06:17:09 +02:00
feat: add post_exec_script support (#520)
This commit is contained in:
parent
04f9fb89ba
commit
8e197fe8ec
@ -28,7 +28,7 @@ ENV GHORG_CONFIG=/config/conf.yaml
|
||||
ENV GHORG_RECLONE_PATH=/config/reclone.yaml
|
||||
ENV GHORG_ABSOLUTE_PATH_TO_CLONE_TO=/data
|
||||
|
||||
RUN apk add -U --no-cache ca-certificates openssh-client tzdata git \
|
||||
RUN apk add -U --no-cache ca-certificates openssh-client tzdata git curl \
|
||||
&& mkdir -p /data $XDG_CONFIG_HOME \
|
||||
&& addgroup --gid $GID $GROUP \
|
||||
&& adduser -D -H --gecos "" \
|
||||
|
29
README.md
29
README.md
@ -249,6 +249,35 @@ The `ghorg reclone` command is a way to store all your `ghorg clone` commands in
|
||||
|
||||
Once your [reclone.yaml](https://github.com/gabrie30/ghorg/blob/master/sample-reclone.yaml) configuration is set you can call `ghorg reclone` to clone each entry individually or clone all at once, see examples below.
|
||||
|
||||
Each reclone entry can have:
|
||||
- `cmd`: The ghorg clone command to execute (required)
|
||||
- `description`: A description of what the command does (optional)
|
||||
- `post_exec_script`: Path to a script that will be called after the clone command finishes (optional). The script will always be called, regardless of success or failure, and receives two arguments: the status (`success` or `fail`) and the name of the reclone entry. This allows you to implement custom notifications, monitoring, or other automation (optional)
|
||||
|
||||
Example `reclone.yaml` entry:
|
||||
|
||||
```yaml
|
||||
gitlab-examples:
|
||||
cmd: "ghorg clone gitlab-examples --scm=gitlab --token=XXXXXXX"
|
||||
post_exec_script: "/path/to/notify.sh"
|
||||
```
|
||||
|
||||
Example script for `post_exec_script` (e.g. `/path/to/notify.sh`):
|
||||
|
||||
```sh
|
||||
#!/bin/sh
|
||||
STATUS="$1"
|
||||
NAME="$2"
|
||||
|
||||
if [ "$STATUS" = "success" ]; then
|
||||
# Success webhook
|
||||
curl -fsS https://hc-ping.com/your-uuid-here
|
||||
else
|
||||
# Failure webhook
|
||||
curl -fsS https://hc-ping.com/your-uuid-here/fail
|
||||
fi
|
||||
```
|
||||
|
||||
```
|
||||
# To clone all the entries in your reclone.yaml omit any arguments
|
||||
ghorg reclone
|
||||
|
@ -20,8 +20,9 @@ var reCloneCmd = &cobra.Command{
|
||||
}
|
||||
|
||||
type ReClone struct {
|
||||
Cmd string `yaml:"cmd"`
|
||||
Description string `yaml:"description"`
|
||||
Cmd string `yaml:"cmd"`
|
||||
Description string `yaml:"description"`
|
||||
PostExecScript string `yaml:"post_exec_script"` // optional
|
||||
}
|
||||
|
||||
func isQuietReClone() bool {
|
||||
@ -196,6 +197,22 @@ func runReClone(rc ReClone, rcIdentifier string) {
|
||||
}
|
||||
|
||||
err = ghorgClone.Wait()
|
||||
status := "success"
|
||||
if err != nil {
|
||||
status = "fail"
|
||||
}
|
||||
|
||||
if rc.PostExecScript != "" {
|
||||
postCmd := exec.Command(rc.PostExecScript, status, rcIdentifier)
|
||||
postCmd.Stdout = os.Stdout
|
||||
postCmd.Stderr = os.Stderr
|
||||
errPost := postCmd.Run()
|
||||
if errPost != nil {
|
||||
colorlog.PrintError(fmt.Sprintf("ERROR: Running post_exec_script %s: %v", rc.PostExecScript, errPost))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if err != nil {
|
||||
spinningSpinner.Stop()
|
||||
colorlog.PrintErrorAndExit(fmt.Sprintf("ERROR: Running ghorg clone cmd: %v, err: %v", safeToLogCmd, err))
|
||||
|
@ -16,6 +16,7 @@
|
||||
# Example for gitlab; update with your gitlab cloud token
|
||||
gitlab-examples:
|
||||
cmd: "ghorg clone gitlab-examples --scm=gitlab --preserve-dir --token=XXXXXXX"
|
||||
post_exec_script: "/path/to/notify.sh"
|
||||
|
||||
# Examples from README.md; update with your github cloud token
|
||||
kubernetes:
|
||||
|
Loading…
Reference in New Issue
Block a user