371 lines
8.4 KiB
Bash
Executable File
371 lines
8.4 KiB
Bash
Executable File
#!/bin/bash
|
|
# Interact with the GOGS API
|
|
# Copyright (c) 2017 Matthew Downey (mattddowney@gmail_NOSPAM_.com)
|
|
# Relased under the MIT License
|
|
# See https://raw.githubusercontent.com/mattddowney/gogs-bash/master/LICENSE for the complete license text
|
|
|
|
action=${1:-"help"}
|
|
|
|
# preseed for checks
|
|
response_code=0
|
|
|
|
# ensure GOGS_ROOT_URL is set
|
|
if [ -z $GOGS_ROOT_URL ]
|
|
then
|
|
printf "Need to set GOGS_ROOT_URL environment variable\n" >&2
|
|
printf "\tIE: https://try.gogs.io\n" >&2
|
|
|
|
response_code=1
|
|
fi
|
|
|
|
# ensure GOGS_TOKEN is set
|
|
if [ -z $GOGS_TOKEN ]
|
|
then
|
|
printf "Need to set GOGS_TOKEN environment variable\n" >&2
|
|
printf "\tThis can be obtained at $GOGS_ROOT_URL/user/settings/applications\n" >&2
|
|
|
|
response_code=1
|
|
fi
|
|
|
|
# exit if either of the environment variables above are not set
|
|
if [ $response_code -ne 0 ]
|
|
then
|
|
exit $response_code
|
|
fi
|
|
|
|
# create a GOGS repository
|
|
# https://github.com/gogits/go-gogs-client/wiki/Administration-Repositories#create-a-new-repository
|
|
create-repo() {
|
|
local user_name=$1 # name of the user / organization where the repo will be created
|
|
local repo_name=$2 # name of the repo to be created
|
|
local repo_desc=$3
|
|
|
|
# ensure user_name is passed in
|
|
if [ -z $user_name ]
|
|
then
|
|
response_code=1
|
|
fi
|
|
|
|
# ensure repo_name is passed in
|
|
if [ -z $repo_name ]
|
|
then
|
|
response_code=1
|
|
fi
|
|
|
|
# print help and exit either of the variables above are not passed in
|
|
if [ $response_code -ne 0 ]
|
|
then
|
|
help "create-repo"
|
|
|
|
exit $response_code
|
|
fi
|
|
|
|
printf "--" "---> Creating GOGS repository\n"
|
|
printf "--" "---> User/Org Name: $user_name\n"
|
|
printf "--" "---> Repo Name: $repo_name\n"
|
|
|
|
local body=$(cat <<-END
|
|
{
|
|
"name": "$repo_name",
|
|
"private": true,
|
|
"description": "$repo_desc"
|
|
}
|
|
END
|
|
)
|
|
|
|
curl -H "Content-Type: application/json" \
|
|
-H "Authorization: token $GOGS_TOKEN" \
|
|
-d "$body" \
|
|
$GOGS_ROOT_URL/api/v1/admin/users/$user_name/repos |jq
|
|
|
|
}
|
|
|
|
# create a GOGS webhook
|
|
# https://github.com/gogits/go-gogs-client/wiki/Repositories-Webhooks#create-a-hook
|
|
create-webhook() {
|
|
local user_name=$1 # name of the user / organization that owns the repo where the webhook will be created
|
|
local repo_name=$2 # name of the repo where the webhook will be created
|
|
local webhook_url=$3 # the url for the webhook that will be created
|
|
local secret=$4 # optional secret that will be passed in the X-Gogs-Signature header
|
|
|
|
# ensure user_name is passed in
|
|
if [ -z $user_name ]
|
|
then
|
|
response_code=1
|
|
fi
|
|
|
|
# ensure repo_name is passed in
|
|
if [ -z $repo_name ]
|
|
then
|
|
response_code=1
|
|
fi
|
|
|
|
# ensure that webhook_url is passed in
|
|
if [ -z $webhook_url ]
|
|
then
|
|
response_code=1
|
|
fi
|
|
|
|
# print help and exit either of the variables above are not passed in
|
|
if [ $response_code -ne 0 ]
|
|
then
|
|
help "create-webhook"
|
|
|
|
exit $response_code
|
|
fi
|
|
|
|
printf "--" "---> Creating GOGS webhook\n"
|
|
printf "--" "---> Repo Name: $repo_name\n"
|
|
printf "--" "---> Webhook URL: $webhook_url\n"
|
|
|
|
local body=$(cat <<-END
|
|
{
|
|
"type": "gogs",
|
|
"config": {
|
|
"content_type": "json",
|
|
"url": "$webhook_url"
|
|
},
|
|
"events": [ "create", "push" ],
|
|
"active": true
|
|
}
|
|
END
|
|
)
|
|
|
|
# add secret to body if one is passed in
|
|
if [ -n $secret ]
|
|
then
|
|
body=$(echo "$body" | jq ".config.secret=\"$secret\"")
|
|
fi
|
|
|
|
curl -H "Content-Type: application/json" \
|
|
-H "Authorization: token $GOGS_TOKEN" \
|
|
-d "$body" \
|
|
$GOGS_ROOT_URL/api/v1/repos/$user_name/$repo_name/hooks
|
|
}
|
|
|
|
# delete a GOGS webhook for a repo
|
|
# https://github.com/gogits/go-gogs-client/wiki/Repositories-Webhooks#delete-a-hook
|
|
delete-webhook() {
|
|
local user_name=$1
|
|
local repo_name=$2
|
|
local webhook_id=$3
|
|
|
|
# ensuer user_name is passed in
|
|
if [ -z $user_name ]
|
|
then
|
|
response_code=1
|
|
fi
|
|
|
|
# ensure repo_name is passed in
|
|
if [ -z $repo_name ]
|
|
then
|
|
response_code=1
|
|
fi
|
|
|
|
# ensure webhook_id is passed in
|
|
if [ -z $webhook_id ]
|
|
then
|
|
response_code=1
|
|
fi
|
|
|
|
# print help and exit any of the variables above are not passed in
|
|
if [ $reponse_code -ne 0 ]
|
|
then
|
|
help "delete-webhook"
|
|
|
|
exit $response_code
|
|
fi
|
|
|
|
printf "--" "---> Deleting GOGS webhook\n"
|
|
printf "--" "---> User Name: $user_name\n"
|
|
printf "--" "---> Repo Name: $repo_name\n"
|
|
printf "--" "---> Webhook Id: $webhook_id\n"
|
|
|
|
curl -H "Authorization: token $GOGS_TOKEN" \
|
|
-X DELETE \
|
|
-v $GOGS_ROOT_URL/api/v1/repos/$user_name/$repo_name/hooks/$webhook_id
|
|
}
|
|
|
|
# print environment information
|
|
env() {
|
|
printf "GOGS_ROOT_URL=$GOGS_ROOT_URL\n"
|
|
printf "GOGS_TOKEN=$GOGS_TOKEN\n"
|
|
}
|
|
|
|
# get a list of GOGS repos for a user
|
|
# https://github.com/gogits/go-gogs-client/wiki/Repositories#list-user-repositories
|
|
get-user-repos() {
|
|
local user_name=$1 # name of the user who's repos to list
|
|
|
|
# ensure user_name is passed in
|
|
if [ -z $user_name ]
|
|
then
|
|
help "get-user-repos"
|
|
|
|
exit 1
|
|
fi
|
|
|
|
printf "--" "---> Getting list of GOGS repos\n"
|
|
printf "--" "---> User Name: $user_name\n"
|
|
|
|
curl -H "Content-Type: application/json" \
|
|
-H "Authorization: token $GOGS_TOKEN" \
|
|
-v $GOGS_ROOT_URL/api/v1/users/$user_name/repos
|
|
}
|
|
|
|
# get a list of GOGS webhooks for a repo
|
|
# https://github.com/gogits/go-gogs-client/wiki/Repositories-Webhooks#list-hooks
|
|
get-webhooks() {
|
|
local user_name=$1 # name of the user / organization that owns the repo
|
|
local repo_name=$2 # name of the repo to list webhooks for
|
|
|
|
# ensure user_name is passed in
|
|
if [ -z $user_name ]
|
|
then
|
|
response_code=1
|
|
fi
|
|
|
|
# ensure repo_name is passed in
|
|
if [ -z $repo_name ]
|
|
then
|
|
response_code=1
|
|
fi
|
|
|
|
# print help and exit either of the variables above are not passed in
|
|
if [ $response_code -ne 0 ]
|
|
then
|
|
help "get-webhooks"
|
|
|
|
exit $response_code
|
|
fi
|
|
|
|
printf "--" "---> Getting list of GOGS webhooks\n"
|
|
printf "--" "---> User Name: $user_name\n"
|
|
printf "--" "---> Repo Name: $repo_name\n"
|
|
|
|
curl -H "Authorization: token $GOGS_TOKEN" \
|
|
-v $GOGS_ROOT_URL/api/v1/repos/$user_name/$repo_name/hooks
|
|
}
|
|
|
|
# print help
|
|
help() {
|
|
local prog_name=$(echo "$0" | rev | cut -d'/' -f1 | rev)
|
|
local topic=$1
|
|
|
|
case "$topic" in
|
|
create-repo)
|
|
cat <<-END
|
|
Create a GOGS repository.
|
|
|
|
Usage:
|
|
|
|
$prog_name $1 <user_name> <repo_name> <repo_desc>
|
|
|
|
Arguments:
|
|
|
|
user_name name of the user or organization where the repo will be created
|
|
repo_name name of the repository to be created
|
|
repo_desc repository description
|
|
END
|
|
;;
|
|
|
|
create-webhook)
|
|
cat <<-END
|
|
Create a GOGS webhook.
|
|
|
|
Usage:
|
|
|
|
$prog_name $1 <user_name> <repo_name> <webhook_url> [secret]
|
|
|
|
Arguments:
|
|
|
|
user_name name of the user / organizationo that owns the repo where the webhook will be created
|
|
repo_name name of the repo where the webhook will be created
|
|
webhook_url the url for the webhook that will be created
|
|
secret optional secret that will be passed in the X-Gogs-Signature header
|
|
END
|
|
;;
|
|
|
|
delete-webhook)
|
|
cat <<-END
|
|
Delete a GOGS webhook.
|
|
|
|
Usage:
|
|
|
|
$prog_name $1 <user_name> <repo_name> <webhook_id>
|
|
|
|
Arguments:
|
|
|
|
user_name name of the user / organizationo that owns the repo containing the webhook
|
|
repo_name name of the repo that contains the webhook
|
|
webhook_id id of the webhook that will be deleted
|
|
END
|
|
;;
|
|
|
|
env)
|
|
cat <<-END
|
|
Prints environment variables needed by this script.
|
|
|
|
Variables:
|
|
|
|
GOGS_ROOT_URL The url of the GOGS server
|
|
(IE: https://try.gogs.io)
|
|
|
|
GOGS_TOKEN Application token configured in GOGS
|
|
(Obtained from $GOGS_ROOT_URL/user/settings/applications)
|
|
END
|
|
;;
|
|
|
|
get-user-repos)
|
|
cat <<-END
|
|
Get a list of GOGS repos for a user.
|
|
|
|
Usage:
|
|
|
|
$prog_name $1 <user_name>
|
|
|
|
Arguments:
|
|
|
|
user_name name of the user who's repos to list
|
|
END
|
|
;;
|
|
|
|
get-webhooks)
|
|
cat <<-END
|
|
Get a list of GOGS webhooks for a repo.
|
|
|
|
Usage:
|
|
|
|
$prog_name $1 <user_name> <repo_name>
|
|
|
|
Arguments:
|
|
|
|
user_name name of the user / organization that owns the repo
|
|
repo_name name of the repo to list webhooks for
|
|
END
|
|
;;
|
|
|
|
*)
|
|
cat <<-END
|
|
$prog_name is a tool for interacting with the GOGS API.
|
|
|
|
Usage:
|
|
$prog_name command [arguments]
|
|
|
|
The commands are:
|
|
|
|
create-repo create a repository
|
|
create-webhook create a webhook
|
|
delete-webhook delete a webhook
|
|
env print environment information
|
|
get-user-repos get a list of repos for a user
|
|
get-webhooks get a list of webhooks for a repo
|
|
|
|
Use "$prog_name help [command]" for more information about a command.
|
|
END
|
|
;;
|
|
esac
|
|
}
|
|
|
|
"$action" "${@:2}"
|