@orange-soft/strapi-deployment-trigger 1.0.1 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/admin/src/pages/HomePage.jsx +109 -61
- package/admin/src/pages/SettingsPage.jsx +270 -97
- package/dist/_chunks/App-CuSCtdH7.js +666 -0
- package/dist/_chunks/App-vakyp6FE.mjs +666 -0
- package/dist/_chunks/{index-C18aSW5z.mjs → index-CZWWYGR3.mjs} +1 -1
- package/dist/_chunks/{index-CqpMwL_C.js → index-DGatQB-9.js} +1 -1
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.mjs +1 -1
- package/dist/server/index.js +160 -24
- package/dist/server/index.mjs +160 -24
- package/package.json +1 -1
- package/server/src/controllers/controller.js +58 -3
- package/server/src/routes/admin/index.js +25 -0
- package/server/src/services/service.js +114 -24
- package/dist/_chunks/App-3JntxPYv.js +0 -520
- package/dist/_chunks/App-C0Byi5W1.mjs +0 -520
|
@@ -3,10 +3,12 @@ const STORE_KEY = 'settings';
|
|
|
3
3
|
|
|
4
4
|
const DEFAULT_SETTINGS = {
|
|
5
5
|
repoUrl: '',
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
githubToken: '',
|
|
7
|
+
targets: [],
|
|
8
8
|
};
|
|
9
9
|
|
|
10
|
+
const generateId = () => Math.random().toString(36).substring(2, 9);
|
|
11
|
+
|
|
10
12
|
const service = ({ strapi }) => ({
|
|
11
13
|
getWelcomeMessage() {
|
|
12
14
|
return 'Welcome to Strapi Deployment Trigger';
|
|
@@ -33,26 +35,52 @@ const service = ({ strapi }) => ({
|
|
|
33
35
|
return { owner: null, repo: null };
|
|
34
36
|
},
|
|
35
37
|
|
|
38
|
+
// Migrate old single-config format to new multi-target format
|
|
39
|
+
migrateSettings(settings) {
|
|
40
|
+
if (!settings) return null;
|
|
41
|
+
|
|
42
|
+
// Already in new format
|
|
43
|
+
if (Array.isArray(settings.targets)) {
|
|
44
|
+
return settings;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// Old format detected - migrate
|
|
48
|
+
if (settings.workflow || settings.branch) {
|
|
49
|
+
return {
|
|
50
|
+
repoUrl: settings.repoUrl || '',
|
|
51
|
+
githubToken: settings.githubToken || '',
|
|
52
|
+
targets: [{
|
|
53
|
+
id: generateId(),
|
|
54
|
+
name: 'Default',
|
|
55
|
+
workflow: settings.workflow || 'deploy.yml',
|
|
56
|
+
branch: settings.branch || 'master',
|
|
57
|
+
}],
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return settings;
|
|
62
|
+
},
|
|
63
|
+
|
|
36
64
|
async getSettings() {
|
|
37
65
|
const store = strapi.store({ type: 'plugin', name: PLUGIN_ID });
|
|
38
|
-
|
|
66
|
+
let dbSettings = await store.get({ key: STORE_KEY });
|
|
39
67
|
|
|
40
|
-
|
|
41
|
-
|
|
68
|
+
// Migrate if needed
|
|
69
|
+
dbSettings = this.migrateSettings(dbSettings);
|
|
70
|
+
|
|
71
|
+
if (!dbSettings) {
|
|
42
72
|
return {
|
|
43
|
-
...
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
maskedToken: this.maskToken(token),
|
|
73
|
+
...DEFAULT_SETTINGS,
|
|
74
|
+
hasToken: false,
|
|
75
|
+
maskedToken: null,
|
|
47
76
|
};
|
|
48
77
|
}
|
|
49
78
|
|
|
50
|
-
|
|
51
|
-
const token = dbSettings?.githubToken;
|
|
79
|
+
const token = dbSettings.githubToken;
|
|
52
80
|
return {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
githubToken: undefined,
|
|
81
|
+
repoUrl: dbSettings.repoUrl || '',
|
|
82
|
+
targets: dbSettings.targets || [],
|
|
83
|
+
githubToken: undefined, // Never expose full token
|
|
56
84
|
hasToken: !!token,
|
|
57
85
|
maskedToken: this.maskToken(token),
|
|
58
86
|
};
|
|
@@ -60,31 +88,92 @@ const service = ({ strapi }) => ({
|
|
|
60
88
|
|
|
61
89
|
async saveSettings(settings) {
|
|
62
90
|
const store = strapi.store({ type: 'plugin', name: PLUGIN_ID });
|
|
63
|
-
|
|
64
|
-
// Get existing settings to preserve token if not provided
|
|
65
91
|
const existingSettings = await store.get({ key: STORE_KEY }) || {};
|
|
66
92
|
|
|
93
|
+
// Migrate existing if needed
|
|
94
|
+
const migrated = this.migrateSettings(existingSettings);
|
|
95
|
+
|
|
67
96
|
const settingsToSave = {
|
|
68
|
-
repoUrl: settings.repoUrl,
|
|
69
|
-
|
|
70
|
-
branch: settings.branch || DEFAULT_SETTINGS.branch,
|
|
97
|
+
repoUrl: settings.repoUrl !== undefined ? settings.repoUrl : (migrated?.repoUrl || ''),
|
|
98
|
+
targets: settings.targets !== undefined ? settings.targets : (migrated?.targets || []),
|
|
71
99
|
// Only update token if a new one is provided
|
|
72
|
-
githubToken: settings.githubToken ||
|
|
100
|
+
githubToken: settings.githubToken || migrated?.githubToken || '',
|
|
73
101
|
};
|
|
74
102
|
|
|
75
103
|
await store.set({ key: STORE_KEY, value: settingsToSave });
|
|
76
104
|
|
|
77
|
-
// Return without exposing token
|
|
78
105
|
return {
|
|
79
|
-
|
|
106
|
+
repoUrl: settingsToSave.repoUrl,
|
|
107
|
+
targets: settingsToSave.targets,
|
|
80
108
|
githubToken: undefined,
|
|
81
109
|
hasToken: !!settingsToSave.githubToken,
|
|
110
|
+
maskedToken: this.maskToken(settingsToSave.githubToken),
|
|
111
|
+
};
|
|
112
|
+
},
|
|
113
|
+
|
|
114
|
+
async addTarget(target) {
|
|
115
|
+
const store = strapi.store({ type: 'plugin', name: PLUGIN_ID });
|
|
116
|
+
let settings = await store.get({ key: STORE_KEY }) || DEFAULT_SETTINGS;
|
|
117
|
+
settings = this.migrateSettings(settings) || DEFAULT_SETTINGS;
|
|
118
|
+
|
|
119
|
+
const newTarget = {
|
|
120
|
+
id: generateId(),
|
|
121
|
+
name: target.name || 'New Target',
|
|
122
|
+
workflow: target.workflow || 'deploy.yml',
|
|
123
|
+
branch: target.branch || 'master',
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
settings.targets = [...(settings.targets || []), newTarget];
|
|
127
|
+
await store.set({ key: STORE_KEY, value: settings });
|
|
128
|
+
|
|
129
|
+
return newTarget;
|
|
130
|
+
},
|
|
131
|
+
|
|
132
|
+
async updateTarget(targetId, updates) {
|
|
133
|
+
const store = strapi.store({ type: 'plugin', name: PLUGIN_ID });
|
|
134
|
+
let settings = await store.get({ key: STORE_KEY });
|
|
135
|
+
settings = this.migrateSettings(settings);
|
|
136
|
+
|
|
137
|
+
if (!settings?.targets) return null;
|
|
138
|
+
|
|
139
|
+
const targetIndex = settings.targets.findIndex(t => t.id === targetId);
|
|
140
|
+
if (targetIndex === -1) return null;
|
|
141
|
+
|
|
142
|
+
settings.targets[targetIndex] = {
|
|
143
|
+
...settings.targets[targetIndex],
|
|
144
|
+
...updates,
|
|
145
|
+
id: targetId, // Preserve ID
|
|
82
146
|
};
|
|
147
|
+
|
|
148
|
+
await store.set({ key: STORE_KEY, value: settings });
|
|
149
|
+
return settings.targets[targetIndex];
|
|
150
|
+
},
|
|
151
|
+
|
|
152
|
+
async deleteTarget(targetId) {
|
|
153
|
+
const store = strapi.store({ type: 'plugin', name: PLUGIN_ID });
|
|
154
|
+
let settings = await store.get({ key: STORE_KEY });
|
|
155
|
+
settings = this.migrateSettings(settings);
|
|
156
|
+
|
|
157
|
+
if (!settings?.targets) return false;
|
|
158
|
+
|
|
159
|
+
const initialLength = settings.targets.length;
|
|
160
|
+
settings.targets = settings.targets.filter(t => t.id !== targetId);
|
|
161
|
+
|
|
162
|
+
if (settings.targets.length === initialLength) return false;
|
|
163
|
+
|
|
164
|
+
await store.set({ key: STORE_KEY, value: settings });
|
|
165
|
+
return true;
|
|
166
|
+
},
|
|
167
|
+
|
|
168
|
+
async getTarget(targetId) {
|
|
169
|
+
const settings = await this.getSettings();
|
|
170
|
+
return settings.targets?.find(t => t.id === targetId) || null;
|
|
83
171
|
},
|
|
84
172
|
|
|
85
173
|
async getToken() {
|
|
86
174
|
const store = strapi.store({ type: 'plugin', name: PLUGIN_ID });
|
|
87
|
-
|
|
175
|
+
let dbSettings = await store.get({ key: STORE_KEY });
|
|
176
|
+
dbSettings = this.migrateSettings(dbSettings);
|
|
88
177
|
return dbSettings?.githubToken || null;
|
|
89
178
|
},
|
|
90
179
|
|
|
@@ -92,7 +181,8 @@ const service = ({ strapi }) => ({
|
|
|
92
181
|
const settings = await this.getSettings();
|
|
93
182
|
const hasToken = await this.getToken();
|
|
94
183
|
const { owner, repo } = this.parseRepoUrl(settings.repoUrl);
|
|
95
|
-
|
|
184
|
+
const hasTargets = settings.targets && settings.targets.length > 0;
|
|
185
|
+
return !!(owner && repo && hasToken && hasTargets);
|
|
96
186
|
},
|
|
97
187
|
|
|
98
188
|
async hasToken() {
|