remove references to gitlab
This commit is contained in:
parent
e32aa8b464
commit
610c7e95b5
7 changed files with 6 additions and 141 deletions
11
README.md
11
README.md
|
@ -2,13 +2,12 @@ A python webserver that automatically hooks into a mattermost instance, listens
|
||||||
|
|
||||||
**TODO**
|
**TODO**
|
||||||
- Hook into mattermost to automatically react to new files
|
- Hook into mattermost to automatically react to new files
|
||||||
- Change gitlab integration to gitea
|
|
||||||
|
|
||||||
**Done**
|
**Done**
|
||||||
- Webserver that starts a sync when an endpoint is called
|
- Webserver that starts a sync when an endpoint is called
|
||||||
- Automatic detection of codimd file links in mattermost message
|
- Automatic detection of codimd file links in mattermost message
|
||||||
- Download of codimd files
|
- Download of codimd files
|
||||||
- Creation of a gitlab pull request for any new files
|
- Creation of a gitea pull request for any new files
|
||||||
- Creation of new commits for any new changes to the files. Hereby updating the existing pull request or creating a new one.
|
- Creation of new commits for any new changes to the files. Hereby updating the existing pull request or creating a new one.
|
||||||
|
|
||||||
|
|
||||||
|
@ -41,13 +40,7 @@ You need to put the following block somewhere in you CodiMD file.
|
||||||
|
|
||||||
Copy the `config.example.toml` file to `config.toml` and complete the missing values.
|
Copy the `config.example.toml` file to `config.toml` and complete the missing values.
|
||||||
|
|
||||||
## Used tech
|
Install the requirements listed in the `requirements.txt`.
|
||||||
|
|
||||||
- [GitLab CLI Tool](https://glab.readthedocs.io/en/latest/index.html)
|
|
||||||
- bash
|
|
||||||
- git
|
|
||||||
- curl
|
|
||||||
- python
|
|
||||||
|
|
||||||
### References
|
### References
|
||||||
|
|
||||||
|
|
|
@ -20,16 +20,6 @@ email = ""
|
||||||
password = ""
|
password = ""
|
||||||
|
|
||||||
|
|
||||||
# Outdated
|
|
||||||
[gitlab]
|
|
||||||
|
|
||||||
host = "https://git.zeus.gent"
|
|
||||||
# access_token_name = "..."
|
|
||||||
# access_token = "..."
|
|
||||||
|
|
||||||
local_repo_folder = "drive"
|
|
||||||
|
|
||||||
|
|
||||||
[gitea]
|
[gitea]
|
||||||
|
|
||||||
server_url = "https://git.zeus.gent"
|
server_url = "https://git.zeus.gent"
|
||||||
|
|
|
@ -6,5 +6,4 @@ mattermostdriver
|
||||||
hug
|
hug
|
||||||
|
|
||||||
gitpython
|
gitpython
|
||||||
python-gitlab
|
|
||||||
giteapy
|
giteapy
|
|
@ -43,7 +43,7 @@ def report_newly_found_file(file_id, file_info):
|
||||||
def report_newly_found_but_invalid_file(file_id, file_info):
|
def report_newly_found_but_invalid_file(file_id, file_info):
|
||||||
message = """Hi there! :wave:
|
message = """Hi there! :wave:
|
||||||
I'm your friendly neighbourhood document sync bot.
|
I'm your friendly neighbourhood document sync bot.
|
||||||
I could synchronize this CodiMD file automatically to our Gitlab DRIVE for safekeeping, but the necessary metadata block is not present.
|
I could synchronize this CodiMD file automatically to our Git DRIVE for safekeeping, but the necessary metadata block is not present.
|
||||||
You can easily add the correct info and I will do the rest of the work for you!
|
You can easily add the correct info and I will do the rest of the work for you!
|
||||||
|
|
||||||
Just add the following lines to your file, the location in your file is not important but at the top would be my recommendation.
|
Just add the following lines to your file, the location in your file is not important but at the top would be my recommendation.
|
||||||
|
|
|
@ -100,7 +100,7 @@ def sync_file(repo, api_instance, path, sync_to):
|
||||||
branch_requests = [r for r in resp if r.head.ref == branch_name]
|
branch_requests = [r for r in resp if r.head.ref == branch_name]
|
||||||
if len(branch_requests) > 0:
|
if len(branch_requests) > 0:
|
||||||
print(
|
print(
|
||||||
" Creating a new merge request to update the gitlab document with the new version from CodiMD."
|
" Creating a new merge request to update the git document with the new version from CodiMD."
|
||||||
)
|
)
|
||||||
api_instance.repo_create_pull_request(
|
api_instance.repo_create_pull_request(
|
||||||
GIT_ORG,
|
GIT_ORG,
|
||||||
|
@ -112,7 +112,7 @@ def sync_file(repo, api_instance, path, sync_to):
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
print(" Creating a new merge request to add the document to gitlab.")
|
print(" Creating a new merge request to add the document to git.")
|
||||||
api_instance.repo_create_pull_request(
|
api_instance.repo_create_pull_request(
|
||||||
GIT_ORG,
|
GIT_ORG,
|
||||||
GIT_REPO,
|
GIT_REPO,
|
||||||
|
|
|
@ -1,103 +0,0 @@
|
||||||
#!/usr/bin/env -S nix shell --impure --expr "(import (builtins.getFlake \"nixpkgs\") {}).python3.withPackages (ps: [ ps.python-gitlab ps.GitPython ])" --command python
|
|
||||||
|
|
||||||
import json
|
|
||||||
import os
|
|
||||||
import pathlib
|
|
||||||
|
|
||||||
import git
|
|
||||||
import gitlab
|
|
||||||
|
|
||||||
from config import config
|
|
||||||
|
|
||||||
TOKEN_NAME = os.environ["GITLAB_ACCESS_TOKEN_NAME"]
|
|
||||||
TOKEN = os.environ["GITLAB_ACCESS_TOKEN"]
|
|
||||||
|
|
||||||
REPO_FOLDER = config["gitlab"]["local_repo_folder"]
|
|
||||||
|
|
||||||
|
|
||||||
def get_repo():
|
|
||||||
if os.path.exists(REPO_FOLDER):
|
|
||||||
print("Repo already exists")
|
|
||||||
repo = git.Repo(REPO_FOLDER)
|
|
||||||
else:
|
|
||||||
print("Cloning repo")
|
|
||||||
repo = git.Repo.clone_from(
|
|
||||||
f"https://{TOKEN_NAME}:{TOKEN}@git.zeus.gent/bestuur/drive.git", REPO_FOLDER
|
|
||||||
)
|
|
||||||
with repo.config_writer() as cw:
|
|
||||||
cw.set_value("user", "email", "codimd.zeus.gent@mcbloch.dev")
|
|
||||||
cw.set_value("user", "name", "CodiMD sync bot")
|
|
||||||
repo.remotes.origin.fetch()
|
|
||||||
return repo
|
|
||||||
|
|
||||||
|
|
||||||
def clear_repo(repo):
|
|
||||||
repo.git.restore("--staged", "--", "*")
|
|
||||||
repo.git.restore("--", "*")
|
|
||||||
|
|
||||||
|
|
||||||
def checkout_branch(repo, branch_name):
|
|
||||||
repo.git.switch("master")
|
|
||||||
if branch_name in repo.heads:
|
|
||||||
repo.git.switch(branch_name)
|
|
||||||
else:
|
|
||||||
repo.git.switch("-c", branch_name)
|
|
||||||
if branch_name in repo.remotes.origin.refs:
|
|
||||||
repo.heads[branch_name].set_tracking_branch(
|
|
||||||
repo.remotes.origin.refs[branch_name]
|
|
||||||
)
|
|
||||||
repo.remotes.origin.pull()
|
|
||||||
|
|
||||||
|
|
||||||
def sync_file(drive, repo, path, sync_to):
|
|
||||||
branch_name = f"codimd-sync_{sync_to}"
|
|
||||||
print(f"Starting sync of {path}")
|
|
||||||
clear_repo(repo)
|
|
||||||
print(f" Checking out onto branch: {branch_name}")
|
|
||||||
checkout_branch(repo, branch_name)
|
|
||||||
with open(path) as r:
|
|
||||||
pathlib.Path(f'{REPO_FOLDER}/{sync_to[:sync_to.rfind("/")]}').mkdir(
|
|
||||||
parents=True, exist_ok=True
|
|
||||||
)
|
|
||||||
with open(f"{REPO_FOLDER}/{sync_to}", "w") as w:
|
|
||||||
w.write(r.read())
|
|
||||||
print(repo.index.diff())
|
|
||||||
print(repo.untracked_files)
|
|
||||||
if repo.index.diff() or repo.untracked_files:
|
|
||||||
print(" Note has changes. Making a commit.")
|
|
||||||
repo.git.add(sync_to)
|
|
||||||
repo.git.commit("-m", sync_to)
|
|
||||||
print(f" Pushing to branch: {branch_name}")
|
|
||||||
repo.git.push("-u", "origin", branch_name)
|
|
||||||
if not drive.mergerequests.list(source_branch=branch_name, state="opened"):
|
|
||||||
if drive.mergerequests.list(source_branch=branch_name):
|
|
||||||
print(
|
|
||||||
" Creating a new merge request to update the gitlab document with the new version from CodiMD."
|
|
||||||
)
|
|
||||||
drive.mergerequests.create(
|
|
||||||
{
|
|
||||||
"source_branch": branch_name,
|
|
||||||
"target_branch": "master",
|
|
||||||
"title": f"[CodiMD sync] Update document {sync_to}",
|
|
||||||
}
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
print(" Creating a new merge request to add the document to gitlab.")
|
|
||||||
drive.mergerequests.create(
|
|
||||||
{
|
|
||||||
"source_branch": branch_name,
|
|
||||||
"target_branch": "master",
|
|
||||||
"title": f"[CodiMD sync] Add document {sync_to}",
|
|
||||||
}
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
print(" Merge request was already open.")
|
|
||||||
else:
|
|
||||||
print(" Note has no changes.")
|
|
||||||
|
|
||||||
|
|
||||||
def init_sync():
|
|
||||||
repo = get_repo()
|
|
||||||
gl = gitlab.Gitlab("https://git.zeus.gent", private_token=TOKEN)
|
|
||||||
drive = gl.projects.get(2)
|
|
||||||
return repo, drive
|
|
16
src/web.py
16
src/web.py
|
@ -5,7 +5,6 @@ import time
|
||||||
import traceback
|
import traceback
|
||||||
from pprint import pprint
|
from pprint import pprint
|
||||||
|
|
||||||
import gitlab
|
|
||||||
import hug
|
import hug
|
||||||
import requests
|
import requests
|
||||||
|
|
||||||
|
@ -14,7 +13,6 @@ import dir_utils
|
||||||
import mattermost_client
|
import mattermost_client
|
||||||
import mattermost_communication
|
import mattermost_communication
|
||||||
import sync_gitea as sync
|
import sync_gitea as sync
|
||||||
import sync_gitlab
|
|
||||||
from config import config
|
from config import config
|
||||||
from utils import id_to_url, url_to_id
|
from utils import id_to_url, url_to_id
|
||||||
|
|
||||||
|
@ -92,18 +90,6 @@ def validate_downloaded_files(post_mattermost_hint=True):
|
||||||
return db._load_db()
|
return db._load_db()
|
||||||
|
|
||||||
|
|
||||||
def sync_files_to_gitlab():
|
|
||||||
repo, drive = sync_gitlab.init_sync()
|
|
||||||
for file_id, file_info in db.get_files().items():
|
|
||||||
if file_info["valid"]:
|
|
||||||
local_file_path = file_info["local_file_path"]
|
|
||||||
sync_to = file_info["metadata"]["sync-to"]
|
|
||||||
try:
|
|
||||||
sync_gitlab.sync_file(drive, repo, local_file_path, sync_to)
|
|
||||||
except Exception as e:
|
|
||||||
print("Critical error: Failed to sync file to Gitlab")
|
|
||||||
|
|
||||||
|
|
||||||
def sync_files_to_gitea():
|
def sync_files_to_gitea():
|
||||||
repo, api_handler = sync.init_sync()
|
repo, api_handler = sync.init_sync()
|
||||||
for file_id, file_info in db.get_files().items():
|
for file_id, file_info in db.get_files().items():
|
||||||
|
@ -133,7 +119,7 @@ def sync_mattermost():
|
||||||
validate_downloaded_files(post_mattermost_hint=True)
|
validate_downloaded_files(post_mattermost_hint=True)
|
||||||
print()
|
print()
|
||||||
print("================================================")
|
print("================================================")
|
||||||
print("== Syncing files to gitlab ==")
|
print("== Syncing files to git ==")
|
||||||
sync_files_to_gitea()
|
sync_files_to_gitea()
|
||||||
print()
|
print()
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue