autocommit

This commit is contained in:
leo 2024-08-22 21:03:07 +05:00
parent d5e5d631d8
commit a6c426eac4
8 changed files with 235 additions and 98 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
install.env

62
README.md Normal file
View File

@ -0,0 +1,62 @@
#### Запустить все:
```sh
cd /data/gitea-init
bash gitea-init.sh
```
`gitea-init.sh` выполнит следующие команды:
```sh
bash gitea-admin.sh
bash create-all.sh
bash push-all.sh
```
После успешного выполнения репозиторий Gitea будет готов к работе.
#### Первоначальная конфигурация:
Параметры, необходимые для инициализации Gitea:
```env
GITEA_API_HOST=git.<gitea_host>
GITEA_USER_NAME=<gitea_admin_username>
ADMIN_EMAIL=<gitea_admin_email>
SERVER_NAME=server-<name>
GIT_REMOTE_PREFIX=<prefix>-
GIT_BRANCH=<branch_name>
```
#### Создание админа и токена доступа к Gitea:
```sh
cd /data/gitea-init
bash gitea-admin.sh
```
Имя токена в Gitea: `WRITE_USER_REPO`
Имя переменной в `/data/secrets/dev.env`: `GITEA_WRITE_USER_REPO`
Права:
* `write:repository `
* `write:user`
#### Создать в Gitea репозитории из файла `repos.list`:
```sh
cd /data/gitea-init
bash create-all.sh
```
#### Push всех репозтиориев из файла `repos.list`:
```sh
cd /data/gitea-init
bash push-all.sh
```

View File

@ -1,36 +1,39 @@
#!/bin/bash #!/bin/bash
LIST_FILE="./repos.list" LIST_FILE="/data/gitea-init/repos.list"
ENV_FILE="/data/secrets/dev.env" ENV_FILE="/data/gitea-init/install.env"
# Checking for a CSV file trap 'echo -e "\033[31mcreate-all.sh: Something went wrong\033[0m"; exit 1' ERR
set -e
echo "Checking for a repos.list file..."
if [ ! -f "$LIST_FILE" ]; then if [ ! -f "$LIST_FILE" ]; then
echo "File $LIST_FILE not found" echo "File $LIST_FILE not found"
exit 1 exit 1
fi fi
# Including a file with environment variables echo "Including a file with environment variables..."
if [ -f $ENV_FILE ]; then if [ -f $ENV_FILE ]; then
source $ENV_FILE source $ENV_FILE
else else
echo "File dev.env not found" echo "File install.env not found"
exit 1 exit 1
fi fi
# Checking the presence of a variable GITEA_W_USER_REPO echo "Checking the presence of a variable GITEA_WRITE_USER_REPO..."
if [ -z "$GITEA_W_USER_REPO" ]; then if [ -z "$GITEA_WRITE_USER_REPO" ]; then
echo "The GITEA_W_USER_REPO variable is not set" echo "The GITEA_WRITE_USER_REPO variable is not set"
exit 1 exit 1
fi fi
# Reading a CSV file and creating repositories echo "Reading a CSV file and creating repositories..."
OLDIFS=$IFS OLDIFS=$IFS
IFS=' | ' IFS=' | '
while read -r NAME_REPO DESCRIPTION_REPO; do while read -r NAME_REPO DESCRIPTION_REPO; do
if [ "$NAME_REPO" != "NAME_REPO" ]; then # Skip title if [ "$NAME_REPO" != "NAME_REPO" ]; then # Skip title
RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" -X POST "https://git.rozenlab.com/api/v1/user/repos" \ RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" -X POST "https://$GITEA_API_HOST/api/v1/user/repos" \
-H "Content-Type: application/json" \ -H "Content-Type: application/json" \
-H "Authorization: token $GITEA_W_USER_REPO" \ -H "Authorization: token $GITEA_WRITE_USER_REPO" \
-d '{ -d '{
"name": "'"$NAME_REPO"'", "name": "'"$NAME_REPO"'",
"private": true, "private": true,
@ -44,4 +47,7 @@ while read -r NAME_REPO DESCRIPTION_REPO; do
fi fi
fi fi
done < "$LIST_FILE" done < "$LIST_FILE"
IFS=$OLDIFS IFS=$OLDIFS
trap - ERR
echo "Create all complete"

42
env-gen-install.sh Normal file
View File

@ -0,0 +1,42 @@
#!/bin/bash
if [ -z "$1" ]; then
echo "Use: $0 <var_name> [value]"
exit 1
fi
VARIABLE_NAME=$1
ENV_FILE="/data/gitea-init/install.env"
trap 'echo -e "\033[31menv-gen-install.sh: Something went wrong\033[0m"; exit 1' ERR
set -e
# Password gen: 20chars,0-9,a-z
generate_random_password() {
pwgen -s 20 1
}
# If the second parameter is specified, use it as the value of the variable
if [ -n "$2" ]; then
VALUE=$2
else
VALUE=$(generate_random_password)
fi
echo "Creating dir and .env file if it doesn't exist..."
if [ ! -f "$ENV_FILE" ]; then
mkdir -p "$(dirname "$ENV_FILE")"
touch "$ENV_FILE"
fi
echo "Update or add a variable to the .env file..."
if grep -q "^$VARIABLE_NAME=" "$ENV_FILE"; then
# The variable exists, update its value
sed -i "s/^$VARIABLE_NAME=.*/$VARIABLE_NAME=$VALUE/" "$ENV_FILE"
else
# The variable does not exist, add it to the file
echo "$VARIABLE_NAME=$VALUE" >> "$ENV_FILE"
fi
trap - ERR
echo "Variable $VARIABLE_NAME successfully updated/added to $ENV_FILE"

63
gitea-admin.sh Normal file
View File

@ -0,0 +1,63 @@
#!/bin/bash
INSTALL_ENV="/data/gitea-init/install.env"
trap 'echo -e "\033[31mgitea-admin.sh: Something went wrong\033[0m"; exit 1' ERR
set -e
source $INSTALL_ENV
echo " Create admin password..."
GITEA_ADMIN_PASSWORD=$(pwgen -s 20 1);
echo "Save GITEA_ADMIN_PASSWORD token to $INSTALL_ENV..."
cd /data/gitea-init
bash env-gen-install.sh GITEA_ADMIN_PASSWORD $GITEA_ADMIN_PASSWORD
echo " Create admin user..."
docker exec -it --user git gitea gitea admin user create --username $GIT_USER --password $GITEA_ADMIN_PASSWORD --email $ADMIN_EMAIL --admin
docker exec -it --user git gitea gitea admin user list
echo " Create admin access token..."
TOKEN=$(curl -s -X POST "https://$GITEA_API_HOST/api/v1/users/$GITEA_USER_NAME/tokens" \
-H "Content-Type: application/json" \
-d '{"name": "WRITE_USER_REPO", "scopes": ["write:repository", "write:user"]}' \
-u "$GITEA_USER_NAME:$GITEA_ADMIN_PASSWORD" | jq -r .sha1)
if [[ -z "$TOKEN" || "$TOKEN" == "null" ]]; then
echo "Failed to obtain admin token"
exit 1
fi
echo "Save GITEA_WRITE_USER_REPO token to $INSTALL_ENV..."
cd /data/gitea-init
bash env-gen-install.sh GITEA_WRITE_USER_REPO $TOKEN
echo "Add public SSH key to gitea app..."
SSH_PUBLIC_KEY=$(cat ~/.ssh/id_ed25519.pub)
echo "Get SSH keys list from gitea API..."
keys=$(curl -X GET -H "Authorization: token $TOKEN" "https://$GITEA_API_HOST/api/v1/user/keys")
echo "Search SSH key in gitea..."
existing_key_id=$(echo $keys | jq -r ".[] | select(.title == \"$SERVER_NAME\") | .id")
echo "If already exist SSH key in gitea, remove it..."
if [ -n "$existing_key_id" ]; then
curl -X DELETE -H "Authorization: token $TOKEN" "https://$GITEA_API_HOST/api/v1/user/keys/$existing_key_id"
echo "SSH key removed"
fi
echo "Add new SSH public key in gitea..."
curl -X POST \
"https://$GITEA_API_HOST/api/v1/user/keys" \
-H "Authorization: token $TOKEN" \
-H "Content-Type: application/json" \
-d "{
\"title\": \"$SERVER_NAME\",
\"key\": \"$SSH_PUBLIC_KEY\"
}"
trap - ERR
echo "New Gitea user and api token created"

11
gitea-init.sh Normal file
View File

@ -0,0 +1,11 @@
#!/bin/bash
trap 'echo -e "\033[31mgitea-init.sh: Something went wrong\033[0m"; exit 1' ERR
set -e
bash gitea-admin.sh
bash create-all.sh
bash push-all.sh
trap - ERR
echo "Gitea inited"

View File

@ -1,90 +1,37 @@
#!/bin/bash
# notes LIST_FILE="/data/gitea-init/repos.list"
# git@rozenlab.com:leo/notes.git ENV_FILE="/data/gitea-init/install.env"
cd /data/notes
git push notes main
# ssl-gen trap 'echo -e "\033[31mcreate-all.sh: Something went wrong\033[0m"; exit 1' ERR
# git@rozenlab.com:leo/ssl-gen.git set -e
cd /data/ssl-gen
git push ssl-gen main
# utils echo "Checking for a repos.list file..."
# git@rozenlab.com:leo/utils.git if [ ! -f "$LIST_FILE" ]; then
cd /data/utils echo "File $LIST_FILE not found"
git push utils main exit 1
fi
# server-origin echo "Including a file with environment variables..."
# git@rozenlab.com:leo/server-origin.git if [ -f $ENV_FILE ]; then
cd /data/server-origin source $ENV_FILE
git push server-origin main else
echo "File install.env not found"
exit 1
fi
# backup echo "Reading a CSV file and creating repositories..."
# git@rozenlab.com:leo/backup.git OLDIFS=$IFS
cd /data/backup IFS=' | '
git push backup main while read -r NAME_REPO DESCRIPTION_REPO; do
if [ "$NAME_REPO" != "NAME_REPO" ]; then # Skip title
cd /data/$NAME_REPO
git remote remove ${PREFIX}$NAME_REPO
git remote add ${PREFIX}$NAME_REPO git@$GITEA_API_HOST:$GITEA_USER_NAME/$NAME_REPO.git
git push ${PREFIX}$NAME_REPO $GIT_BRANCH
fi
done < "$LIST_FILE"
IFS=$OLDIFS
# gitea trap - ERR
# git@rozenlab.com:leo/gitea.git echo "Create all complete"
cd /data/gitea
git push gitea main
# traefik
# git@rozenlab.com:leo/traefik.git
cd /data/traefik
git push traefik main
# socks5
# git@rozenlab.com:leo/socks5.git
cd /data/socks5
git push socks5 main
# install
# git@rozenlab.com:leo/install.git
cd /data/install
git push install main
# server-backup
# git@rozenlab.com:leo/server-backup.git
cd /data/server-backup
git push server-backup main
# tetris
# git@rozenlab.com:Leo/tetris.git
cd /data/tetris
git push tetris main
# brickgame
# git@rozenlab.com:leo/brickgame.git
cd /data/brickgame
git push brickgame main
# blog-frontend
# git@rozenlab.com:leo/blog-frontend.git
cd /data/blog-frontend
git push blog-frontend main
# blog-wp
# git@rozenlab.com:leo/blog-wp.git
cd /data/blog-wp
git push blog-wp main
# nginx-main
# git@rozenlab.com:leo/nginx-main.git
#cd /data/nginx-main
#git push nginx-main main
# pgadmin
# git@rozenlab.com:leo/pgadmin.git
cd /data/pgadmin
git push pgadmin main
# postgres
# git@rozenlab.com:leo/postgres.git
cd /data/postgres
git push postgres main
# gitea-init
# git@rozenlab.com:leo/gitea-init.git
cd /data/gitea-init
git push gitea-init main

View File

@ -9,6 +9,11 @@ backup | Backup all databases & files
server-origin | Head site, repositories, etc server-origin | Head site, repositories, etc
notes | Other notes notes | Other notes
ssl-gen | Self signed SSL certs generator ssl-gen | Self signed SSL certs generator
brickgame | Tetris and other games
tetris | Classic Tetris tetris | Classic Tetris
brickgame | Modular system with several games brickgame | Modular system with several games
blog-wp | Wordpress dev blog
blog-wp-install | Init wordpress blog
mariadb | Docker Mariadb for Wordpress dev blog
gitea-init | Create all repos of origin in Gitea
postgres | Docker postgres for traefik
pgadmin | Docker pgadmin for traefik