Moved to project to a program state. Adds help menu.
This commit is contained in:
parent
db28a20c04
commit
36a3f5eae0
86
README.md
86
README.md
@ -1,42 +1,88 @@
|
|||||||
## Convert Zip Packages to Repositories
|
# Octozipo
|
||||||
|
|
||||||
The idea of this script is to update a bunch of respositories at once with simple zip packages.
|
Convert Zip packages to repositories and if they exist update and tag them.
|
||||||
|
|
||||||
## Install
|
## Install
|
||||||
|
|
||||||
Clone this repository
|
|
||||||
```shell
|
```shell
|
||||||
$ git clone https://git.vdm.dev/octoleo/zip-to-repo.git
|
$ sudo curl -L "https://git.vdm.dev/api/v1/repos/octoleo/octozipo/raw/src/octozipo" -o /usr/local/bin/octozipo
|
||||||
|
$ sudo chmod +x /usr/local/bin/octozipo
|
||||||
```
|
```
|
||||||
|
- Global **environment** file can be set at: `/home/$USER/.config/octozipo/.env`
|
||||||
|
- OR/And Per projects **environment** file `.octozipo` inside the _same_ directory as the zip files
|
||||||
|
|
||||||
Then setup your own **environment** file `.env` with the following values:
|
**Options:**
|
||||||
```txt
|
```txt
|
||||||
ORG="octoleo"
|
VDM_ORG="octoleo"
|
||||||
ROOTDIR="/home/user/path/to/zip/files/"
|
VDM_ROOT_DIR="/home/user/path/to/zip/files/"
|
||||||
REMOTESYSTEM="git.vdm.dev"
|
VDM_REMOTE_SYSTEM="git.vdm.dev"
|
||||||
PUSH_CREATE=true
|
VDM_PUSH_CREATE=true
|
||||||
```
|
```
|
||||||
|
|
||||||
- ORG: git.vdm.dev/[ORG] in the repository path
|
- VDM_ORG: git.vdm.dev/[ORG] in the repository path (default: octoleo)
|
||||||
- ROOTDIR: the full path to where you have placed all the zipped files
|
- VDM_ROOT_DIR: the full path to where you have placed all the zipped files (default: current dir)
|
||||||
- REMOTESYSTEM: the base URI of your gitea system
|
- VDM_REMOTE_SYSTEM: the base URI of your gitea system (default: git.vdm.dev)
|
||||||
- PUSH_CREATE: switch to push-create repositories that don't already exist
|
- VDM_PUSH_CREATE: switch to push-create repositories that don't already exist (default: false)
|
||||||
|
|
||||||
## Run the script
|
## Usage
|
||||||
|
|
||||||
Make the script executable
|
> To see the help menu
|
||||||
```shell
|
```shell
|
||||||
$ sudo chmod +x run.sh
|
$ octozipo -h
|
||||||
|
```
|
||||||
|
---
|
||||||
|
|
||||||
|
> To update
|
||||||
|
```shell
|
||||||
|
$ octozipo --update
|
||||||
```
|
```
|
||||||
|
|
||||||
Execute the script
|
### Help Menu (Octozipo)
|
||||||
|
```txt
|
||||||
|
Usage: octozipo [OPTION...]
|
||||||
|
Options
|
||||||
|
======================================================
|
||||||
|
-e | --env=<file>
|
||||||
|
load the environment variables file
|
||||||
|
example: octozipo --env=/src/.env
|
||||||
|
======================================================
|
||||||
|
-q | --quiet
|
||||||
|
mute all output messages
|
||||||
|
example: octozipo --quiet
|
||||||
|
======================================================
|
||||||
|
--update
|
||||||
|
to update your install
|
||||||
|
example: octozipo --update
|
||||||
|
======================================================
|
||||||
|
--uninstall
|
||||||
|
to uninstall this script
|
||||||
|
example: octozipo --uninstall
|
||||||
|
======================================================
|
||||||
|
-h|--help
|
||||||
|
display this help menu
|
||||||
|
example: octozipo -h
|
||||||
|
example: octozipo --help
|
||||||
|
======================================================
|
||||||
|
Octozipo v1.0.1
|
||||||
|
======================================================
|
||||||
|
```
|
||||||
|
### Example
|
||||||
|
|
||||||
|
Execute the script in the directory where your zip files are found
|
||||||
```shell
|
```shell
|
||||||
$ ./run.sh
|
$ octozipo joomla true
|
||||||
|
```
|
||||||
|
|
||||||
|
This will target the git.vdm.dev/joomla organization and if a package is unzipped and not found it will push to create that repository.
|
||||||
|
|
||||||
|
### Uninstall
|
||||||
|
|
||||||
|
```shell
|
||||||
|
$ octozipo --uninstall
|
||||||
```
|
```
|
||||||
|
|
||||||
### Free Software License
|
### Free Software License
|
||||||
```txt
|
```txt
|
||||||
@copyright Copyright (C) 2021 Llewellyn van der Merwe. All rights reserved.
|
@copyright Copyright (C) 2021 Llewellyn van der Merwe. All rights reserved.
|
||||||
@license GNU General Public License version 2 or later; see LICENSE.txt
|
@license GNU General Public License version 2; see LICENSE.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
|
228
run.sh
228
run.sh
@ -1,228 +0,0 @@
|
|||||||
#! /bin/bash
|
|
||||||
|
|
||||||
# set the defaults
|
|
||||||
ORG="octoleo"
|
|
||||||
ROOT_DIR="$PWD"
|
|
||||||
REMOTE_SYSTEM="git.vdm.dev"
|
|
||||||
PUSH_CREATE=false
|
|
||||||
|
|
||||||
# add env to system
|
|
||||||
if [ -f ".env" ]; then
|
|
||||||
source .env
|
|
||||||
fi
|
|
||||||
|
|
||||||
# catch the values passed
|
|
||||||
ORG="${1:-$ORG}"
|
|
||||||
PUSH_CREATE="${2:-$PUSH_CREATE}"
|
|
||||||
ROOT_DIR="${3:-$ROOT_DIR}"
|
|
||||||
REMOTE_SYSTEM="${4:-$REMOTE_SYSTEM}"
|
|
||||||
|
|
||||||
# show globals if needed
|
|
||||||
# echo "$ORG"
|
|
||||||
# echo "$ROOT_DIR"
|
|
||||||
# echo "$REMOTE_SYSTEM"
|
|
||||||
# exit
|
|
||||||
|
|
||||||
main() {
|
|
||||||
# make sure the root dir exist
|
|
||||||
if [ -d "$ROOT_DIR" ]; then
|
|
||||||
# go to folder where zip files are placed
|
|
||||||
cd "$ROOT_DIR" || exit 3
|
|
||||||
# check that the folder has zip files
|
|
||||||
# shellcheck disable=SC2012
|
|
||||||
[ "$(ls -1 ./*.zip 2>/dev/null | wc -l)" == 0 ] && showError "looking for zip files, since no zip files in the folder $ROOT_DIR ERROR-NR" 6
|
|
||||||
# get all zip files
|
|
||||||
for z in *.zip; do
|
|
||||||
# get folder and repo name
|
|
||||||
repo=$(getRepoName "$z")
|
|
||||||
# get folder and repo name
|
|
||||||
version=$(getVersion "$z")
|
|
||||||
echo "${repo} - v${version}"
|
|
||||||
# check if the repo exist on our system
|
|
||||||
if git ls-remote "git@${REMOTE_SYSTEM}:${ORG}/${repo}.git" -q >/dev/null 2>&1; then
|
|
||||||
setExistingRepository "$repo" "${version:-0}" "$z" || showError "Update Repo:(${repo}) ERROR-NR" 7
|
|
||||||
else
|
|
||||||
setNewRepository "$repo" "${version:-0}" "$z" || showError "Setup Repo:(${repo}) ERROR-NR" 7
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
else
|
|
||||||
showError "opening of folder $ROOT_DIR as it does not exist ERROR-NR" 5
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# get repository name
|
|
||||||
getRepoName() {
|
|
||||||
local name
|
|
||||||
name=$(rightStrip "$1" "-v*")
|
|
||||||
name=$(rightStrip "$name" "_v*")
|
|
||||||
name=$(rightStrip "$name" ".zip")
|
|
||||||
echo "$name"
|
|
||||||
}
|
|
||||||
|
|
||||||
# get current version
|
|
||||||
getVersion() {
|
|
||||||
local version
|
|
||||||
version=$(leftStrip "$1" "*-v")
|
|
||||||
version=$(leftStrip "$version" "*_v")
|
|
||||||
version=$(rightStrip "$version" ".zip")
|
|
||||||
version=${version//-/\.}
|
|
||||||
version=${version//_/\.}
|
|
||||||
version=$(rightStrip "$version" "..*")
|
|
||||||
echo "$version"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Strip pattern from end of string
|
|
||||||
rightStrip() {
|
|
||||||
# Usage: rightStrip "string" "pattern"
|
|
||||||
printf '%s\n' "${1%%$2}"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Strip pattern from start of string
|
|
||||||
leftStrip() {
|
|
||||||
# Usage: leftStrip "string" "pattern"
|
|
||||||
printf '%s\n' "${1##$2}"
|
|
||||||
}
|
|
||||||
|
|
||||||
# setup new repository
|
|
||||||
setNewRepository() {
|
|
||||||
echo "New repository (${REMOTE_SYSTEM}:${ORG}/$1)"
|
|
||||||
# set repo path
|
|
||||||
repo_path="$ROOT_DIR/$1"
|
|
||||||
# set zip path
|
|
||||||
zip_path="$ROOT_DIR/$3"
|
|
||||||
# we creat the repo dir
|
|
||||||
mkdir -p "$repo_path"
|
|
||||||
# change to this directory and make sure its empty
|
|
||||||
if cd "$repo_path" >/dev/null 2>&1; then
|
|
||||||
rm -rf ./*
|
|
||||||
else
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
# we unzip the data to this new folder
|
|
||||||
if unzip "$zip_path" -d "$repo_path" >/dev/null 2>&1; then
|
|
||||||
echo "Successfully unzipped the package"
|
|
||||||
else
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
# we initialize the git repo locally
|
|
||||||
setGitInit "$1" "$2" || return 1
|
|
||||||
# check if push create is allowed
|
|
||||||
if ($PUSH_CREATE); then
|
|
||||||
# we push to create this repo
|
|
||||||
git push -u origin master >/dev/null 2>&1
|
|
||||||
# check if we have tags to push
|
|
||||||
git push --tags >/dev/null 2>&1
|
|
||||||
# always move back to root folder
|
|
||||||
cd "$ROOT_DIR" || return 1
|
|
||||||
# we remove the ZIP file
|
|
||||||
rm "${zip_path:?}"
|
|
||||||
# we can also remove the folder
|
|
||||||
rm -rf "${repo_path:?}"
|
|
||||||
# pushed create
|
|
||||||
echo "Push created ($1-v$2) repository"
|
|
||||||
else
|
|
||||||
# give action info
|
|
||||||
echo "When ready link and push changes to remote"
|
|
||||||
# always move back to root folder
|
|
||||||
cd "$ROOT_DIR" || return 1
|
|
||||||
# we remove the ZIP file
|
|
||||||
# rm "$zip_path" (don't remove since we may need to run this again if a name of the zip has changed)
|
|
||||||
fi
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
# show an error
|
|
||||||
showError() {
|
|
||||||
echo "We encountered and error on $1:$2"
|
|
||||||
exit "$2"
|
|
||||||
}
|
|
||||||
|
|
||||||
# make git commit of the update and set the new tag
|
|
||||||
setGitInit() {
|
|
||||||
# check if this is an existing local repo
|
|
||||||
if [ -d ".git" ]; then
|
|
||||||
if [[ -z $(git status --porcelain) ]]; then
|
|
||||||
echo "No changes found in repository"
|
|
||||||
else
|
|
||||||
if [ "$(git tag -l "v$2")" ]; then
|
|
||||||
setGitCommit "$2" "update" || return 4
|
|
||||||
else
|
|
||||||
setGitCommit "$2" "update - v$2" || return 4
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
git init || return 4
|
|
||||||
setGitCommit "$2" "first commit - v$2" || return 4
|
|
||||||
git remote add origin "git@${REMOTE_SYSTEM}:${ORG}/${1}.git"
|
|
||||||
fi
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
# make git commit of the update and set the new tag
|
|
||||||
setGitCommit() {
|
|
||||||
git add . >/dev/null 2>&1 || return 1
|
|
||||||
git commit -am"$2" >/dev/null 2>&1 || return 1
|
|
||||||
# check if tag exist
|
|
||||||
if [ "$(git tag -l "v$1")" ]; then
|
|
||||||
return 0
|
|
||||||
else
|
|
||||||
git tag "v$1" >/dev/null 2>&1 || return 1
|
|
||||||
fi
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
# make git commit of the update and set the new tag
|
|
||||||
setPushChanges() {
|
|
||||||
git push >/dev/null 2>&1 || return 1
|
|
||||||
git push --tags >/dev/null 2>&1 || return 1
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
# update repository repository
|
|
||||||
setExistingRepository() {
|
|
||||||
echo "Update ($1-v$2) repository"
|
|
||||||
# set repo path
|
|
||||||
repo_path="$ROOT_DIR/$1"
|
|
||||||
# set zip path
|
|
||||||
zip_path="$ROOT_DIR/$3"
|
|
||||||
# check if repo is locally found
|
|
||||||
cd "$repo_path" >/dev/null 2>&1 || git clone "git@${REMOTE_SYSTEM}:${ORG}/${1}.git"
|
|
||||||
# make sure we are in the correct dir
|
|
||||||
if cd "$repo_path" >/dev/null 2>&1; then
|
|
||||||
rm -rf ./*
|
|
||||||
else
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
# now lets unzip the new data to this repo
|
|
||||||
if unzip "$zip_path" -d "$repo_path" >/dev/null 2>&1; then
|
|
||||||
echo "Successfully unzipped the package"
|
|
||||||
else
|
|
||||||
# break out
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
# lets check if there are changes
|
|
||||||
if [[ -z $(git status --porcelain) ]]; then
|
|
||||||
echo "No changes found in ($1-v$2) repository"
|
|
||||||
else
|
|
||||||
if [ "$(git tag -l "v$2")" ]; then
|
|
||||||
setGitCommit "$2" "update" || return 4
|
|
||||||
else
|
|
||||||
setGitCommit "$2" "update - v$2" || return 4
|
|
||||||
fi
|
|
||||||
# push the changes
|
|
||||||
setPushChanges || return 1
|
|
||||||
# updated the repository
|
|
||||||
echo "Pushed update to ($1-v$2) repository"
|
|
||||||
fi
|
|
||||||
# always move back to root folder
|
|
||||||
cd "$ROOT_DIR" || return 1
|
|
||||||
# we remove the ZIP file
|
|
||||||
rm "${zip_path:?}"
|
|
||||||
# we can also remove the folder
|
|
||||||
rm -rf "${repo_path:?}"
|
|
||||||
# success
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
# run main
|
|
||||||
main
|
|
383
src/octozipo
Executable file
383
src/octozipo
Executable file
@ -0,0 +1,383 @@
|
|||||||
|
#! /bin/bash
|
||||||
|
|
||||||
|
# Program name
|
||||||
|
PROGRAM_NAME="Octozipo"
|
||||||
|
PROGRAM_CODE="octozipo"
|
||||||
|
PROGRAM_VERSION="1.0.1"
|
||||||
|
PROGRAM_V="1.0"
|
||||||
|
PROGRAM_URL="https://git.vdm.dev/octoleo/${PROGRAM_CODE}"
|
||||||
|
|
||||||
|
# Do some prep work
|
||||||
|
command -v git >/dev/null 2>&1 || {
|
||||||
|
echo >&2 "[error] We require git for $PROGRAM_NAME v${PROGRAM_V} to work, but it's not installed. Aborting."
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
command -v unzip >/dev/null 2>&1 || {
|
||||||
|
echo >&2 "[error] We require unzip for $PROGRAM_NAME v${PROGRAM_V} to work, but it's not installed. Aborting."
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
command -v curl >/dev/null 2>&1 || {
|
||||||
|
echo >&2 "[error] We require curl for $PROGRAM_NAME v${PROGRAM_V} to work, but it's not installed. Aborting."
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# main function ˘Ô≈ôﺣ
|
||||||
|
main() {
|
||||||
|
# make sure the root dir exist
|
||||||
|
if [ -d "$VDM_ROOT_DIR" ]; then
|
||||||
|
# go to folder where zip files are placed
|
||||||
|
cd "$VDM_ROOT_DIR" || exit 3
|
||||||
|
# check that the folder has zip files
|
||||||
|
# shellcheck disable=SC2012
|
||||||
|
[ "$(ls -1 ./*.zip 2>/dev/null | wc -l)" == 0 ] && showError "looking for zip files, since no zip files in the folder $VDM_ROOT_DIR ERROR-NR" 6
|
||||||
|
# get all zip files
|
||||||
|
for z in *.zip; do
|
||||||
|
# get folder and repo name
|
||||||
|
repo=$(getRepoName "$z")
|
||||||
|
# get folder and repo name
|
||||||
|
version=$(getVersion "$z")
|
||||||
|
_echo "[info] ${repo} - v${version}"
|
||||||
|
# check if the repo exist on our system
|
||||||
|
if git ls-remote "git@${VDM_REMOTE_SYSTEM}:${VDM_ORG}/${repo}.git" -q >/dev/null 2>&1; then
|
||||||
|
setExistingRepository "$repo" "${version:-0}" "$z" || showError "Update Repo:(${repo}) ERROR-NR" 7
|
||||||
|
else
|
||||||
|
setNewRepository "$repo" "${version:-0}" "$z" || showError "Setup Repo:(${repo}) ERROR-NR" 7
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
else
|
||||||
|
showError "opening of folder $VDM_ROOT_DIR as it does not exist ERROR-NR" 5
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# get repository name
|
||||||
|
getRepoName() {
|
||||||
|
local name
|
||||||
|
name=$(rightStrip "$1" "-v*")
|
||||||
|
name=$(rightStrip "$name" "_v*")
|
||||||
|
name=$(rightStrip "$name" ".zip")
|
||||||
|
echo "$name"
|
||||||
|
}
|
||||||
|
|
||||||
|
# get current version
|
||||||
|
# TODO need improve this to more accurate when a zip file name is not following this convention
|
||||||
|
getVersion() {
|
||||||
|
local version
|
||||||
|
version=$(leftStrip "$1" "*-v")
|
||||||
|
version=$(leftStrip "$version" "*_v")
|
||||||
|
version=$(rightStrip "$version" ".zip")
|
||||||
|
version=${version//-/\.}
|
||||||
|
version=${version//_/\.}
|
||||||
|
version=$(rightStrip "$version" "..*")
|
||||||
|
echo "$version"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Strip pattern from end of string
|
||||||
|
rightStrip() {
|
||||||
|
# Usage: rightStrip "string" "pattern"
|
||||||
|
printf '%s\n' "${1%%$2}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Strip pattern from start of string
|
||||||
|
leftStrip() {
|
||||||
|
# Usage: leftStrip "string" "pattern"
|
||||||
|
printf '%s\n' "${1##$2}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# setup new repository
|
||||||
|
setNewRepository() {
|
||||||
|
_echo "[info] New repository (${VDM_REMOTE_SYSTEM}:${VDM_ORG}/$1)"
|
||||||
|
# set repo path
|
||||||
|
repo_path="$VDM_ROOT_DIR/$1"
|
||||||
|
# set zip path
|
||||||
|
zip_path="$VDM_ROOT_DIR/$3"
|
||||||
|
# we creat the repo dir
|
||||||
|
mkdir -p "$repo_path"
|
||||||
|
# change to this directory and make sure its empty
|
||||||
|
if cd "$repo_path" >/dev/null 2>&1; then
|
||||||
|
rm -rf ./*
|
||||||
|
else
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
# we unzip the data to this new folder
|
||||||
|
if unzip "$zip_path" -d "$repo_path" >/dev/null 2>&1; then
|
||||||
|
_echo "[info] Successfully unzipped the package"
|
||||||
|
else
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
# we initialize the git repo locally
|
||||||
|
setGitInit "$1" "$2" || return 1
|
||||||
|
# check if push create is allowed
|
||||||
|
if ($VDM_PUSH_CREATE); then
|
||||||
|
# we push to create this repo
|
||||||
|
git push -u origin master >/dev/null 2>&1
|
||||||
|
# check if we have tags to push
|
||||||
|
git push --tags >/dev/null 2>&1
|
||||||
|
# always move back to root folder
|
||||||
|
cd "$VDM_ROOT_DIR" || return 1
|
||||||
|
# we remove the ZIP file
|
||||||
|
rm "${zip_path:?}"
|
||||||
|
# we can also remove the folder
|
||||||
|
rm -rf "${repo_path:?}"
|
||||||
|
# pushed create
|
||||||
|
_echo "[info] Push created ($1-v$2) repository"
|
||||||
|
else
|
||||||
|
# give action info
|
||||||
|
echo "[info] When ready link and push changes to remote"
|
||||||
|
# always move back to root folder
|
||||||
|
cd "$VDM_ROOT_DIR" || return 1
|
||||||
|
# we remove the ZIP file
|
||||||
|
# rm "$zip_path" (don't remove since we may need to run this again if a name of the zip has changed)
|
||||||
|
fi
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# make git commit of the update and set the new tag
|
||||||
|
setGitInit() {
|
||||||
|
# check if this is an existing local repo
|
||||||
|
if [ -d ".git" ]; then
|
||||||
|
if [[ -z $(git status --porcelain) ]]; then
|
||||||
|
_echo "[info] No changes found in repository"
|
||||||
|
else
|
||||||
|
if [ "$(git tag -l "v$2")" ]; then
|
||||||
|
setGitCommit "$2" "update" || return 4
|
||||||
|
else
|
||||||
|
setGitCommit "$2" "update - v$2" || return 4
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
git init || return 4
|
||||||
|
setGitCommit "$2" "first commit - v$2" || return 4
|
||||||
|
git remote add origin "git@${VDM_REMOTE_SYSTEM}:${VDM_ORG}/${1}.git"
|
||||||
|
fi
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# make git commit of the update and set the new tag
|
||||||
|
setGitCommit() {
|
||||||
|
git add . >/dev/null 2>&1 || return 1
|
||||||
|
git commit -am"$2" >/dev/null 2>&1 || return 1
|
||||||
|
# check if tag exist
|
||||||
|
if [ "$(git tag -l "v$1")" ]; then
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
git tag "v$1" >/dev/null 2>&1 || return 1
|
||||||
|
fi
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# make git commit of the update and set the new tag
|
||||||
|
setPushChanges() {
|
||||||
|
git push >/dev/null 2>&1 || return 1
|
||||||
|
git push --tags >/dev/null 2>&1 || return 1
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# update repository repository
|
||||||
|
setExistingRepository() {
|
||||||
|
_echo "[info] Update ($1-v$2) repository"
|
||||||
|
# set repo path
|
||||||
|
repo_path="$VDM_ROOT_DIR/$1"
|
||||||
|
# set zip path
|
||||||
|
zip_path="$VDM_ROOT_DIR/$3"
|
||||||
|
# check if repo is locally found
|
||||||
|
cd "$repo_path" >/dev/null 2>&1 || git clone "git@${VDM_REMOTE_SYSTEM}:${VDM_ORG}/${1}.git"
|
||||||
|
# make sure we are in the correct dir
|
||||||
|
if cd "$repo_path" >/dev/null 2>&1; then
|
||||||
|
rm -rf ./*
|
||||||
|
else
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
# now lets unzip the new data to this repo
|
||||||
|
if unzip "$zip_path" -d "$repo_path" >/dev/null 2>&1; then
|
||||||
|
_echo "[info] Successfully unzipped the package"
|
||||||
|
else
|
||||||
|
# break out
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
# lets check if there are changes
|
||||||
|
if [[ -z $(git status --porcelain) ]]; then
|
||||||
|
_echo "[info] No changes found in ($1-v$2) repository"
|
||||||
|
else
|
||||||
|
if [ "$(git tag -l "v$2")" ]; then
|
||||||
|
setGitCommit "$2" "update" || return 4
|
||||||
|
else
|
||||||
|
setGitCommit "$2" "update - v$2" || return 4
|
||||||
|
fi
|
||||||
|
# push the changes
|
||||||
|
setPushChanges || return 1
|
||||||
|
# updated the repository
|
||||||
|
_echo "[info] Pushed update to ($1-v$2) repository"
|
||||||
|
fi
|
||||||
|
# always move back to root folder
|
||||||
|
cd "$VDM_ROOT_DIR" || return 1
|
||||||
|
# we remove the ZIP file
|
||||||
|
rm "${zip_path:?}"
|
||||||
|
# we can also remove the folder
|
||||||
|
rm -rf "${repo_path:?}"
|
||||||
|
# success
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# only if not set to be quiet
|
||||||
|
function _echo() {
|
||||||
|
if (("$QUIET" == 0)); then
|
||||||
|
echo "$1"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# show an error
|
||||||
|
showError() {
|
||||||
|
echo "[error] We encountered and error on $1:$2"
|
||||||
|
exit "$2"
|
||||||
|
}
|
||||||
|
|
||||||
|
# remove the program if installed
|
||||||
|
function runUninstall() {
|
||||||
|
# now remove the script
|
||||||
|
if [ -f "/usr/local/bin/${PROGRAM_CODE}" ]; then
|
||||||
|
sudo rm -f "/usr/local/bin/${PROGRAM_CODE}"
|
||||||
|
echo "[info] ${PROGRAM_NAME} v${PROGRAM_VERSION} has been completely uninstalled."
|
||||||
|
else
|
||||||
|
echo "[info] ${PROGRAM_NAME} v${PROGRAM_VERSION} is not installed."
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# update the script with the latest version
|
||||||
|
function runUpdate() {
|
||||||
|
# remove the current version
|
||||||
|
if [ -f "/usr/local/bin/${PROGRAM_CODE}" ]; then
|
||||||
|
# just backup in case of failure
|
||||||
|
sudo mv "/usr/local/bin/${PROGRAM_CODE}" "/usr/local/bin/${PROGRAM_CODE}.bak"
|
||||||
|
fi
|
||||||
|
# pull the latest version. Master is always the latest
|
||||||
|
if sudo curl --fail -L "https://git.vdm.dev/api/v1/repos/octoleo/${PROGRAM_CODE}/raw/src/${PROGRAM_CODE}?ref=${branch:-master}" -o "/usr/local/bin/${PROGRAM_CODE}" 2>/dev/null; then
|
||||||
|
# give success message
|
||||||
|
_echo "[success] Update was successful."
|
||||||
|
# do we have a backup
|
||||||
|
if [ -f "/usr/local/bin/${PROGRAM_CODE}.bak" ]; then
|
||||||
|
# lets remove it now
|
||||||
|
sudo rm -f "/usr/local/bin/${PROGRAM_CODE}.bak"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# show the error
|
||||||
|
echo >&2 "[error] Update failed! Please try again later."
|
||||||
|
# do we have a backup
|
||||||
|
if [ -f "/usr/local/bin/${PROGRAM_CODE}.bak" ]; then
|
||||||
|
# move backup back
|
||||||
|
sudo mv "/usr/local/bin/${PROGRAM_CODE}.bak" "/usr/local/bin/${PROGRAM_CODE}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
# always set the permission again if we have a file
|
||||||
|
if [ -f "/usr/local/bin/${PROGRAM_CODE}" ]; then
|
||||||
|
# the we make sure its executable
|
||||||
|
sudo chmod +x "/usr/local/bin/${PROGRAM_CODE}"
|
||||||
|
fi
|
||||||
|
# always exit so the new script can load
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# help message ʕ•ᴥ•ʔ
|
||||||
|
function show_help() {
|
||||||
|
cat <<EOF
|
||||||
|
Usage: ${PROGRAM_CODE} [OPTION...]
|
||||||
|
Options
|
||||||
|
======================================================
|
||||||
|
-e | --env=<file>
|
||||||
|
load the environment variables file
|
||||||
|
example: ${PROGRAM_CODE} --env=/src/.env
|
||||||
|
======================================================
|
||||||
|
-q | --quiet
|
||||||
|
mute all output messages
|
||||||
|
example: ${PROGRAM_CODE} --quiet
|
||||||
|
======================================================
|
||||||
|
--update
|
||||||
|
to update your install
|
||||||
|
example: ${PROGRAM_CODE} --update
|
||||||
|
======================================================
|
||||||
|
--uninstall
|
||||||
|
to uninstall this script
|
||||||
|
example: ${PROGRAM_CODE} --uninstall
|
||||||
|
======================================================
|
||||||
|
-h|--help
|
||||||
|
display this help menu
|
||||||
|
example: ${PROGRAM_CODE} -h
|
||||||
|
example: ${PROGRAM_CODE} --help
|
||||||
|
======================================================
|
||||||
|
${PROGRAM_NAME} v${PROGRAM_VERSION}
|
||||||
|
======================================================
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
# set the defaults
|
||||||
|
VDM_ORG="octoleo"
|
||||||
|
VDM_ROOT_DIR="$PWD"
|
||||||
|
VDM_REMOTE_SYSTEM="git.vdm.dev"
|
||||||
|
VDM_PUSH_CREATE=false
|
||||||
|
QUIET=0
|
||||||
|
|
||||||
|
# check if we have options
|
||||||
|
while :; do
|
||||||
|
case $1 in
|
||||||
|
-h | --help)
|
||||||
|
show_help # Display a usage synopsis.
|
||||||
|
exit
|
||||||
|
;;
|
||||||
|
-q | --quiet)
|
||||||
|
QUIET=1
|
||||||
|
;;
|
||||||
|
--uninstall)
|
||||||
|
runUninstall
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--update)
|
||||||
|
runUpdate
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-e | --env) # Takes an option argument; ensure it has been specified.
|
||||||
|
if [ "$2" ]; then
|
||||||
|
VDM_ENV_FILE_PATH=$2
|
||||||
|
shift
|
||||||
|
else
|
||||||
|
echo '[error] "--env" requires a non-empty option argument.'
|
||||||
|
exit 17
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
-e=?* | --env=?*)
|
||||||
|
VDM_ENV_FILE_PATH=${1#*=} # Delete everything up to "=" and assign the remainder.
|
||||||
|
;;
|
||||||
|
-e= | --env=) # Handle the case of an empty --packages=
|
||||||
|
echo '[error] "--env=" requires a non-empty option argument.'
|
||||||
|
exit 17
|
||||||
|
;;
|
||||||
|
*) # Default case: No more options, so break out of the loop.
|
||||||
|
break ;;
|
||||||
|
esac
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
|
||||||
|
# the environment variables path
|
||||||
|
tmp_path="$VDM_ROOT_DIR/.${PROGRAM_CODE}"
|
||||||
|
# if path not set try VDM_ROOT_DIR path
|
||||||
|
[ -f "$tmp_path" ] || tmp_path="/home/$USER/.config/${PROGRAM_CODE}/.env"
|
||||||
|
tmp_path="${VDM_ENV_FILE_PATH:-$tmp_path}"
|
||||||
|
# add env to system
|
||||||
|
if [ -f ".${tmp_path}" ]; then
|
||||||
|
# shellcheck disable=SC1090
|
||||||
|
source ".${tmp_path}"
|
||||||
|
fi
|
||||||
|
unset tmp_path
|
||||||
|
|
||||||
|
# catch the values passed
|
||||||
|
VDM_ORG="${1:-$VDM_ORG}"
|
||||||
|
VDM_PUSH_CREATE="${2:-$VDM_PUSH_CREATE}"
|
||||||
|
VDM_ROOT_DIR="${3:-$VDM_ROOT_DIR}"
|
||||||
|
VDM_REMOTE_SYSTEM="${4:-$VDM_REMOTE_SYSTEM}"
|
||||||
|
|
||||||
|
# show globals if DEBUG
|
||||||
|
# echo "$VDM_ORG"
|
||||||
|
# echo "$VDM_ROOT_DIR"
|
||||||
|
# echo "$VDM_REMOTE_SYSTEM"
|
||||||
|
# exit
|
||||||
|
|
||||||
|
# run main
|
||||||
|
main
|
Loading…
x
Reference in New Issue
Block a user