Skip to content

Commit ec61758

Browse files
committed
Chore: externalize redirects as separate module from gatsby-node.js
Signed-off-by: Lee Calcote <lee.calcote@layer5.io>
1 parent 26fbfaa commit ec61758

3 files changed

Lines changed: 240 additions & 359 deletions

File tree

gatsby-node.js

Lines changed: 5 additions & 359 deletions
Original file line numberDiff line numberDiff line change
@@ -42,367 +42,13 @@ if (process.env.CI === "true") {
4242
};
4343
}
4444

45-
exports.createPages = async ({ actions, graphql, reporter }) => {
46-
// Create client-side redirects (these only work in prod deployment)
47-
const { createRedirect } = actions;
48-
createRedirect({
49-
fromPath: "/books",
50-
toPath: "/learn/service-mesh-books",
51-
redirectInBrowser: true,
52-
isPermanent: true,
53-
});
54-
createRedirect({
55-
fromPath: "/books/the-enterprise-path-to-service-mesh-architectures",
56-
toPath:
57-
"/learn/service-mesh-books/the-enterprise-path-to-service-mesh-architectures",
58-
redirectInBrowser: true,
59-
isPermanent: true,
60-
});
61-
createRedirect({
62-
fromPath:
63-
"/books/the-enterprise-path-to-service-mesh-architectures-2nd-edition",
64-
toPath:
65-
"/learn/service-mesh-books/the-enterprise-path-to-service-mesh-architectures-2nd-edition",
66-
redirectInBrowser: true,
67-
isPermanent: true,
68-
});
69-
createRedirect({
70-
fromPath: "/books/istio-up-and-running",
71-
toPath: "/learn/service-mesh-books/istio-up-and-running",
72-
redirectInBrowser: true,
73-
isPermanent: true,
74-
});
75-
createRedirect({
76-
fromPath: "/learn/service-mesh-workshops",
77-
toPath: "/learn/workshops",
78-
redirectInBrowser: true,
79-
isPermanent: true,
80-
});
81-
createRedirect({
82-
fromPath: "/workshops",
83-
toPath: "/learn/workshops",
84-
redirectInBrowser: true,
85-
isPermanent: true,
86-
});
87-
createRedirect({
88-
fromPath: "/labs",
89-
toPath: "/learn/service-mesh-labs",
90-
redirectInBrowser: true,
91-
isPermanent: true,
92-
});
93-
createRedirect({
94-
fromPath: "/meshery",
95-
toPath: "/cloud-native-management/meshery",
96-
redirectInBrowser: true,
97-
isPermanent: true,
98-
});
99-
createRedirect({
100-
fromPath: "/service-mesh-management/meshery",
101-
toPath: "/cloud-native-management/meshery",
102-
redirectInBrowser: true,
103-
isPermanent: true,
104-
});
105-
createRedirect({
106-
fromPath: "/service-mesh-management/meshery/operating-service-meshes",
107-
toPath: "/cloud-native-management/meshery/operating-cloud-native-infra",
108-
redirectInBrowser: true,
109-
isPermanent: true,
110-
});
111-
createRedirect({
112-
fromPath: "/cloud-native-management/meshery/operating-service-meshes",
113-
toPath: "/cloud-native-management/meshery/operating-cloud-native-infra",
114-
redirectInBrowser: true,
115-
isPermanent: true,
116-
});
117-
createRedirect({
118-
fromPath: "/service-mesh-management/meshery/getting-started",
119-
toPath: "/cloud-native-management/meshery/getting-started",
120-
redirectInBrowser: true,
121-
isPermanent: true,
122-
});
123-
createRedirect({
124-
fromPath: "/landscape",
125-
toPath: "/service-mesh-landscape",
126-
redirectInBrowser: true,
127-
isPermanent: true,
128-
});
129-
createRedirect({
130-
fromPath: "/events",
131-
toPath: "/community/events",
132-
redirectInBrowser: true,
133-
isPermanent: true,
134-
});
135-
createRedirect({
136-
fromPath: "/programs",
137-
toPath: "/careers/programs",
138-
redirectInBrowser: true,
139-
isPermanent: true,
140-
});
141-
createRedirect({
142-
fromPath: "/about",
143-
toPath: "/company/about",
144-
redirectInBrowser: true,
145-
isPermanent: true,
146-
});
147-
createRedirect({
148-
fromPath: "/brand",
149-
toPath: "/company/brand",
150-
redirectInBrowser: true,
151-
isPermanent: true,
152-
});
153-
createRedirect({
154-
fromPath: "/contact",
155-
toPath: "/company/contact",
156-
redirectInBrowser: true,
157-
isPermanent: true,
158-
});
159-
createRedirect({
160-
fromPath: "/news",
161-
toPath: "/company/news",
162-
redirectInBrowser: true,
163-
isPermanent: true,
164-
});
165-
createRedirect({
166-
fromPath: "/service-meshes",
167-
toPath: "/service-mesh-landscape",
168-
redirectInBrowser: true,
169-
isPermanent: true,
170-
});
171-
createRedirect({
172-
fromPath: "/calendar",
173-
toPath: "/community/calendar",
174-
redirectInBrowser: true,
175-
isPermanent: true,
176-
});
177-
createRedirect({
178-
fromPath: "/smi",
179-
toPath: "/projects/service-mesh-interface-conformance",
180-
redirectInBrowser: true,
181-
isPermanent: true,
182-
});
183-
createRedirect({
184-
fromPath: "/projects/getnighthawk",
185-
toPath: "/projects/nighthawk",
186-
redirectInBrowser: true,
187-
isPermanent: true,
188-
});
189-
createRedirect({
190-
fromPath: "/projects/getnighthawk",
191-
toPath: "/projects/nighthawk",
192-
redirectInBrowser: true,
193-
isPermanent: true,
194-
});
195-
createRedirect({
196-
fromPath: "/projects/service-mesh-performance",
197-
toPath: "/projects/cloud-native-performance",
198-
redirectInBrowser: true,
199-
isPermanent: true,
200-
});
201-
createRedirect({
202-
fromPath: "/blog/category/service-mesh-performance",
203-
toPath: "/blog/category/service-mesh",
204-
redirectInBrowser: true,
205-
isPermanent: true,
206-
});
207-
createRedirect({
208-
fromPath: "/blog/category/service-mesh-performance/",
209-
toPath: "/blog/category/service-mesh",
210-
redirectInBrowser: true,
211-
isPermanent: true,
212-
});
213-
createRedirect({
214-
fromPath: "/blog/tag/smi",
215-
toPath: "/blog/tag/service-mesh-interface",
216-
redirectInBrowser: true,
217-
isPermanent: true,
218-
});
219-
createRedirect({
220-
fromPath: "/catalog",
221-
toPath: "/cloud-native-management/catalog",
222-
redirectInBrowser: true,
223-
isPermanent: true,
224-
});
225-
createRedirect({
226-
fromPath: "/cloud-native-management/meshery/integrations/argocd-operator",
227-
toPath: "/cloud-native-management/meshery/integrations/argo-cd-operator",
228-
redirectInBrowser: true,
229-
isPermanent: true,
230-
});
231-
createRedirect({
232-
fromPath: "/cloud-native-management/meshery/integrations/argocd-operator/",
233-
toPath: "/cloud-native-management/meshery/integrations/argo-cd-operator",
234-
redirectInBrowser: true,
235-
isPermanent: true,
236-
});
237-
createRedirect({
238-
fromPath: "/blog/category/landscape",
239-
toPath: "/blog/tag/landscape",
240-
redirectInBrowser: true,
241-
isPermanent: true,
242-
});
243-
createRedirect({
244-
fromPath: "/blog/category/landscape/",
245-
toPath: "/blog/tag/landscape",
246-
redirectInBrowser: true,
247-
isPermanent: true,
248-
});
249-
createRedirect({
250-
fromPath: "/blog/category/service-mesh-specifications",
251-
toPath: "/blog/category/service-mesh",
252-
redirectInBrowser: true,
253-
isPermanent: true,
254-
});
255-
createRedirect({
256-
fromPath: "/orchestration-management",
257-
toPath: "/solutions/orchestration-management",
258-
redirectInBrowser: true,
259-
isPermanent: true,
260-
});
261-
createRedirect({
262-
fromPath: "/cloud-native-management/gitops",
263-
toPath: "/solutions/gitops",
264-
redirectInBrowser: true,
265-
isPermanent: true,
266-
});
267-
createRedirect({
268-
fromPath: "/cloud-native-management/gitops/snapshot",
269-
toPath: "/solutions/gitops/snapshot",
270-
redirectInBrowser: true,
271-
isPermanent: true,
272-
});
273-
createRedirect({
274-
fromPath: "/cloud-native-management/gitops/performance-management",
275-
toPath: "/solutions/gitops/performance-management",
276-
redirectInBrowser: true,
277-
isPermanent: true,
278-
});
279-
createRedirect({
280-
fromPath: "/blog/announcements/meshery-5000-star-milestone",
281-
toPath: "/blog/announcements/mesherys-5000-star-milestone",
282-
redirectInBrowser: true,
283-
isPermanent: true,
284-
});
285-
286-
//****
287-
// External Resource Redirects
288-
//****
289-
290-
// New Community Member (Google Form)
291-
createRedirect({
292-
fromPath: "/newcomer",
293-
toPath: "/newcomers",
294-
redirectInBrowser: true,
295-
isPermanent: true,
296-
});
297-
createRedirect({
298-
fromPath: "/kanvas",
299-
toPath: "/cloud-native-management/kanvas",
300-
redirectInBrowser: true,
301-
isPermanent: true,
302-
});
303-
createRedirect({
304-
fromPath: "/cloud-native-management/meshmap",
305-
toPath: "/cloud-native-management/kanvas",
306-
redirectInBrowser: true,
307-
isPermanent: true,
308-
});
309-
createRedirect({
310-
fromPath: "/meshmap",
311-
toPath: "/cloud-native-management/kanvas",
312-
redirectInBrowser: true,
313-
isPermanent: true,
314-
});
315-
createRedirect({
316-
fromPath: "/go/meshmap",
317-
toPath: "/cloud-native-management/kanvas",
318-
redirectInBrowser: true,
319-
isPermanent: true,
320-
});
321-
createRedirect({
322-
fromPath: "/cloud-native-management/kanvas/visualize",
323-
toPath: "/cloud-native-management/kanvas/operate",
324-
redirectInBrowser: true,
325-
isPermanent: true,
326-
});
327-
createRedirect({
328-
fromPath: "/kanvas/visualize",
329-
toPath: "/cloud-native-management/kanvas/operate",
330-
redirectInBrowser: true,
331-
isPermanent: true,
332-
});
333-
createRedirect({
334-
fromPath: "/kanvas/operate",
335-
toPath: "/cloud-native-management/kanvas/operate",
336-
redirectInBrowser: true,
337-
isPermanent: true,
338-
});
339-
createRedirect({
340-
fromPath: "/resources/cloud-native/hpes-adoption-of-meshery-and-meshmap",
341-
toPath: "/resources/case-study/hpes-adoption-of-meshery-and-meshmap",
342-
redirectInBrowser: true,
343-
isPermanent: true,
344-
});
345-
createRedirect({
346-
fromPath: "/sitemap.xml",
347-
toPath: "/sitemap-index.xml",
348-
redirectInBrowser: true,
349-
isPermanent: true,
350-
});
351-
createRedirect({
352-
fromPath: "/products/nighthawk",
353-
toPath: "/projects/nighthawk",
354-
redirectInBrowser: true,
355-
isPermanent: true,
356-
});
35745

358-
createRedirect({
359-
fromPath: "/products/service-mesh-performance",
360-
toPath: "/projects/cloud-native-performance",
361-
redirectInBrowser: true,
362-
isPermanent: true,
363-
});
46+
const { loadRedirects } = require("./src/utils/redirects.js");
36447

365-
createRedirect({
366-
fromPath: "/products/service-mesh-performance-specification",
367-
toPath: "/projects/cloud-native-performance",
368-
redirectInBrowser: true,
369-
isPermanent: true,
370-
});
371-
372-
createRedirect({
373-
fromPath: "/cloud-native-management/meshmap/collaborate",
374-
toPath: "/cloud-native-management/kanvas/collaborate",
375-
redirectInBrowser: true,
376-
isPermanent: true,
377-
});
378-
379-
createRedirect({
380-
fromPath: "/blog/tag/meshery-open-source",
381-
toPath: "/blog/tag/open-source",
382-
redirectInBrowser: true,
383-
isPermanent: true,
384-
});
385-
386-
createRedirect({
387-
fromPath: "/blog/category/opensource",
388-
toPath: "/blog/category/open-source",
389-
redirectInBrowser: true,
390-
isPermanent: true,
391-
});
392-
393-
createRedirect({
394-
fromPath: "/cloud-native-management/meshmap/design",
395-
toPath: "/cloud-native-management/kanvas/design",
396-
redirectInBrowser: true,
397-
isPermanent: true,
398-
});
399-
400-
createRedirect({
401-
fromPath: "/cloud-native-management/meshmap/collaborate/peer-reviews",
402-
toPath: "/cloud-native-management/kanvas/collaborate/peer-reviews",
403-
redirectInBrowser: true,
404-
isPermanent: true,
405-
});
48+
exports.createPages = async ({ actions, graphql, reporter }) => {
49+
const { createRedirect } = actions;
50+
const redirects = loadRedirects();
51+
redirects.forEach(redirect => createRedirect(redirect)); // Handles all hardcoded ones dynamically
40652
// Create Pages
40753
const { createPage } = actions;
40854

src/utils/redirects.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// utils/redirects.js
2+
const fs = require('fs');
3+
const yaml = require('js-yaml'); // Add to package.json if needed
4+
5+
const loadRedirects = () => {
6+
const file = fs.readFileSync('./redirects.yaml', 'utf8');
7+
return yaml.load(file).redirects || [];
8+
};
9+
10+
module.exports = { loadRedirects };

0 commit comments

Comments
 (0)