90 lines
1.8 KiB
Markdown
90 lines
1.8 KiB
Markdown
|
# 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
|
||
|
```
|