pds-migration-playbook.txt
1* Migration
2** Blank env
3export INVITECODE=
4export ACCOUNTDID=did:plc:XXX
5export OLDPDSHOST=https://bsky.social
6export OLDPDSSERVICEDID=did:web:bsky.social
7export OLDHANDLE=
8export OLDPASSWORD=""
9export NEWPDSHOST=https://pds.merklehost.xyz
10export NEWPDSSERVICEDID=did:web:pds.merklehost.xyz
11export NEWHANDLE=
12export NEWPASSWORD=""
13export NEWEMAIL=
14
15# these come later in the process
16export SERVICEAUTH=
17export PLCTOKEN=
18export ROTATIONKEY=
19
20** Prep
21- [X] create a empty directory to store everything
22- [X] `touch env` and add template from above
23- [X] pdsadmin create-invite-code # for use in account creation (if `inviteCodeRequired`)
24- [X] add INVITECODE to env, save, and source
25- [X] echo $ACCOUNTDID # to make sure new vars have loaded
26- [X] goat account login -u $OLDHANDLE -p $OLDPASSWORD
27- [X] goat account service-auth --lxm com.atproto.server.createAccount --aud $NEWPDSSERVICEDID --duration-sec 3600 | pbcopy
28- [X] add SERVICEAUTH to env, save, and source
29- [X] goat account plc request-token
30- [X] add PLCTOKEN to env, save, and source
31
32** Export/Import
33- [X] goat account status # note count of records/blobs and repoCommit
34- [X] goat repo export $ACCOUNTDID
35- [X] goat blob export $ACCOUNTDID
36- [X] goat bsky prefs export > prefs.json
37- [X] goat account logout
38- [X] goat account create --pds-host $NEWPDSHOST --existing-did $ACCOUNTDID --handle $NEWHANDLE --password $NEWPASSWORD --email $NEWEMAIL --invite-code $INVITECODE --service-auth $SERVICEAUTH
39- [X] goat account login --pds-host $NEWPDSHOST -u $ACCOUNTDID -p $NEWPASSWORD
40- [X] goat repo import ./${ACCOUNTDID}.*.car
41- [X] goat account status
42- [X] fd . ./${ACCOUNTDID}_blobs/ | parallel -j1 goat blob upload {}
43- [X] goat bsky prefs import prefs.json
44- [X] goat account status
45
46** PLC
47- [X] goat account plc recommended > plc_unsigned.json
48- [X] goat crypto generate -t secp256k1 | pbcopy
49- [X] add ROTATIONKEY to env, save, and source
50- [X] goat crypto inspect $ROTATIONKEY
51- [X] (add DID Key to `rotationKeys`, if setting a rotation key)
52- [X] goat account login -u $OLDHANDLE -p $OLDPASSWORD
53- [X] goat account plc sign --token $PLCTOKEN ./plc_unsigned.json > plc_signed.json
54- [X] goat account login --pds-host $NEWPDSHOST -u $ACCOUNTDID -p $NEWPASSWORD
55- [X] goat account plc submit ./plc_signed.json
56
57** Cutover
58- [X] goat account status
59- [X] goat account activate
60- [X] goat account login --pds-host $OLDPDSHOST -u $ACCOUNTDID -p $OLDPASSWORD
61- [X] goat account deactivate