1.8 KiB
1.8 KiB
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
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
SELECT * FROM user
WHERE email !='';
Execution:
CONFIG_FILE=./app.yml go run ./cmd/users/main.go
orgs migration
Export results of this query to .csv to migrate the users
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:
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:
CONFIG_FILE=./app.yml go run ./cmd/org/main.go
collaborators migration
Export results of this query to .csv to migrate the repositories
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:
CONFIG_FILE=./app.yml go run ./cmd/collaborator/main.go