gogstea/README.md

90 lines
1.8 KiB
Markdown
Raw Permalink Normal View History

2024-08-30 13:45:18 +02:00
# gogstea
## migration from gogs to gitea with less pain
High level operation:
The main idea is to do a copy. The script will take the users from csv data from gogs, previously obtained, and will create gitea users interacting with gitea API
```go
source := gogs.mysql --> select * from user; --> csv
dst:= gitea.postgres --> API /admin gitea --> go script read from csv and http post to gitea api
copy(dst, source)
```
### users migration
Export results of this query to .csv to migrate the users
```sql
SELECT * FROM user
WHERE email !='';
```
**Execution:**
```sh
CONFIG_FILE=./app.yml go run ./cmd/users/main.go
```
### orgs migration
Export results of this query to .csv to migrate the users
```sql
SELECT
u.name,
ou.org_id,
uo.name AS owner_name,
uo.email AS owner_email
FROM org_user ou
INNER JOIN user u ON ou.org_id = u.id
INNER JOIN user uo ON uo.id = ou.is_owner
```
**Execution:**
```sh
CONFIG_FILE=./app.yml go run ./cmd/org/main.go
```
### repositories migration
You have to options: You can use the API to import them or like I did: manually import using the `unadopted` button from the UI.
**Execution:**
```sh
CONFIG_FILE=./app.yml go run ./cmd/org/main.go
```
### collaborators migration
Export results of this query to .csv to migrate the repositories
```sql
SELECT
r.name AS repo_name,
uo.name AS repo_owner,
u.name AS collaborator_user,
co.mode,
CASE
WHEN co.mode = 1 THEN 'read'
WHEN co.mode = 2 THEN 'write'
WHEN co.mode = 3 THEN 'admin'
WHEN co.mode = 4 THEN 'owner'
ELSE 'failed'
END AS permission
FROM collaboration co
INNER JOIN repository r ON r.id = co.repo_id
INNER JOIN user uo ON uo.id = r.owner_id
INNER JOIN user u ON u.id = co.user_id;
```
**Execution:**
```sh
CONFIG_FILE=./app.yml go run ./cmd/collaborator/main.go
```