Skip to content

Commit 8647db8

Browse files
committed
terraform-modules
1 parent 9cf87a4 commit 8647db8

16 files changed

Lines changed: 3284 additions & 7 deletions

‎.github/workflows/lighthouse.yml‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,3 +37,4 @@ jobs:
3737
http://127.0.0.1:8080/k8s-manifest-builder/
3838
http://127.0.0.1:8080/visual-subnet-calculator/
3939
http://127.0.0.1:8080/yaml-formatter/
40+
http://127.0.0.1:8080/terraform-modules/
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
name: Terraform module catalogue
2+
3+
on:
4+
pull_request:
5+
paths:
6+
- ".github/workflows/terraform-modules.yml"
7+
- "scripts/sync-terraform-modules.py"
8+
- "terraform-modules/**"
9+
push:
10+
branches:
11+
- main
12+
paths:
13+
- ".github/workflows/terraform-modules.yml"
14+
- "scripts/sync-terraform-modules.py"
15+
- "terraform-modules/**"
16+
schedule:
17+
- cron: "17 7 * * 1"
18+
workflow_dispatch:
19+
20+
permissions:
21+
contents: read
22+
23+
jobs:
24+
verify:
25+
runs-on: ubuntu-latest
26+
27+
steps:
28+
- name: Check out repository
29+
uses: actions/checkout@v6
30+
31+
- name: Check Registry, GitHub, and generated catalogue
32+
env:
33+
GITHUB_TOKEN: ${{ github.token }}
34+
run: python3 scripts/sync-terraform-modules.py --check

‎README.md‎

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,43 @@ The shorter `/json-formatter/` alias redirects to this tool.
3232
YAML parsing and serialization use the vendored `js-yaml` 4.1.0 browser
3333
bundle, distributed under the MIT license included with the tool.
3434

35+
## Terraform Modules
36+
37+
Open `/terraform-modules/` to explore public AWS Terraform modules
38+
maintained by the native-cube GitHub organization. The catalogue covers Amazon
39+
EKS, EKS Auto Mode, managed node groups, Fargate profiles, KMS, and VPC Flow
40+
Logs, with direct links to each GitHub repository and Terraform Registry page.
41+
42+
Module names, descriptions, categories, and visual treatments are maintained in
43+
`terraform-modules/modules.json`. Registry versions, release dates, required
44+
inputs, Terraform and AWS requirements, and GitHub status are synchronized into
45+
the same file and used to generate the module cards and structured data.
46+
47+
Refresh live metadata and regenerate the page:
48+
49+
```sh
50+
python3 scripts/sync-terraform-modules.py --write
51+
```
52+
53+
Regenerate from local catalogue data without network access, or verify live data
54+
and committed HTML without changing files:
55+
56+
```sh
57+
python3 scripts/sync-terraform-modules.py --render
58+
python3 scripts/sync-terraform-modules.py --check
59+
```
60+
61+
To add a module, add its curated entry to `modules.json`, publish the matching
62+
`terraform-aws-<name>` repository and Registry module, then run `--write`. The
63+
weekly catalogue workflow also reports Registry, GitHub, or generated-page drift.
64+
65+
The dedicated social card is maintained as an editable SVG. On macOS, regenerate
66+
its required 1200×630 PNG with:
67+
68+
```sh
69+
sh scripts/render-social-card.sh
70+
```
71+
3572
## To preview locally
3673

3774
```sh
@@ -41,6 +78,7 @@ python3 -m http.server 8080
4178
- `http://localhost:8080/k8s-manifest-builder/`
4279
- `http://localhost:8080/visual-subnet-calculator/`
4380
- `http://localhost:8080/yaml-formatter/`
81+
- `http://localhost:8080/terraform-modules/`
4482

4583
## Quality and search checks
4684

‎SEARCH_CONSOLE.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ invented or replaced with a placeholder.
3131
- `https://native-cube.github.io/k8s-manifest-builder/`
3232
- `https://native-cube.github.io/visual-subnet-calculator/`
3333
- `https://native-cube.github.io/yaml-formatter/`
34+
- `https://native-cube.github.io/terraform-modules/`
3435
4. Do not submit `/json-formatter/`; it is a `noindex` convenience alias.
3536

3637
The account owner can provide the downloaded verification file to a
645 KB
Loading
Lines changed: 62 additions & 0 deletions
Loading

‎index.html‎

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<meta name="viewport" content="width=device-width, initial-scale=1" />
66
<meta
77
name="description"
8-
content="Free browser-based cloud-native tools for Kubernetes manifests, IPv4 subnet planning, and YAML or JSON formatting. No sign-up or server uploads."
8+
content="Free cloud-native browser tools and public AWS Terraform modules for Kubernetes, network planning, configuration formatting, and infrastructure as code."
99
/>
1010
<meta name="author" content="Marcin Cuber" />
1111
<meta name="theme-color" content="#f2f5f9" />
@@ -17,7 +17,7 @@
1717
/>
1818
<meta
1919
property="og:description"
20-
content="Free browser-based tools for Kubernetes manifests, visual IPv4 subnet planning, and YAML or JSON formatting."
20+
content="Free browser-based cloud-native tools and public AWS Terraform modules from Native Cube."
2121
/>
2222
<meta property="og:url" content="https://native-cube.github.io/" />
2323
<meta
@@ -37,7 +37,7 @@
3737
/>
3838
<meta
3939
name="twitter:description"
40-
content="Free browser-based tools for Kubernetes manifests, visual IPv4 subnet planning, and YAML or JSON formatting."
40+
content="Free browser-based cloud-native tools and public AWS Terraform modules from Native Cube."
4141
/>
4242
<meta
4343
name="twitter:image"
@@ -58,7 +58,7 @@
5858
"name": "Native Cube",
5959
"alternateName": ["Native Cube Tools", "native-cube.github.io"],
6060
"url": "https://native-cube.github.io/",
61-
"description": "Free browser-based cloud-native tools for generating Kubernetes manifests, visually planning IPv4 subnets, and formatting YAML or JSON.",
61+
"description": "Free browser-based cloud-native tools and public AWS Terraform modules for Kubernetes, network planning, configuration formatting, and infrastructure as code.",
6262
"creator": {
6363
"@type": "Person",
6464
"name": "Marcin Cuber",
@@ -280,7 +280,7 @@
280280

281281
.tools {
282282
display: grid;
283-
grid-template-columns: repeat(auto-fit, minmax(280px, 340px));
283+
grid-template-columns: repeat(2, minmax(0, 340px));
284284
justify-content: center;
285285
gap: 28px;
286286
}
@@ -484,8 +484,8 @@
484484
<p class="eyebrow">Purpose-built infrastructure utilities</p>
485485
<h1>Free tools for cloud-native work.</h1>
486486
<p class="intro">
487-
Generate Kubernetes manifests, visually plan IPv4 subnets, and format YAML
488-
or JSON with focused utilities that run entirely in your browser.
487+
Generate Kubernetes manifests, visually plan IPv4 subnets, format YAML
488+
or JSON, and discover reusable AWS Terraform modules.
489489
</p>
490490
<p class="author-byline">
491491
<span>Created and maintained by</span>
@@ -554,6 +554,24 @@ <h2>YAML &amp; JSON Formatter</h2>
554554
</p>
555555
<span class="arrow" aria-hidden="true">↗</span>
556556
</a>
557+
<a class="tool" href="./terraform-modules/">
558+
<span class="tag">Public AWS modules</span>
559+
<svg
560+
class="tool-cube"
561+
viewBox="0 0 40 40"
562+
aria-hidden="true"
563+
>
564+
<path d="M20 2.5 36 11.3 20 20 4 11.3 20 2.5Z" fill="#7552a5" />
565+
<path d="M4 11.3 20 20v17.5L4 28.7V11.3Z" fill="#14243b" />
566+
<path d="M36 11.3 20 20v17.5l16-8.8V11.3Z" fill="#22a77a" />
567+
<path d="m20 8 6 3.3-6 3.2-6-3.2L20 8Z" fill="#f2f5f9" />
568+
</svg>
569+
<h2>Terraform Modules</h2>
570+
<p>
571+
Explore reusable AWS modules for EKS, KMS, and network observability.
572+
</p>
573+
<span class="arrow" aria-hidden="true">↗</span>
574+
</a>
557575
</section>
558576

559577
<footer>

‎scripts/render-social-card.m‎

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
#import <AppKit/AppKit.h>
2+
#import <Foundation/Foundation.h>
3+
4+
5+
int main(int argc, const char *argv[]) {
6+
@autoreleasepool {
7+
if (argc != 3) {
8+
fprintf(stderr, "Usage: render-social-card INPUT.svg OUTPUT.png\n");
9+
return 2;
10+
}
11+
12+
NSString *inputPath = [NSString stringWithUTF8String:argv[1]];
13+
NSString *outputPath = [NSString stringWithUTF8String:argv[2]];
14+
NSImage *image = [[NSImage alloc] initWithContentsOfFile:inputPath];
15+
if (image == nil) {
16+
fprintf(stderr, "Could not load %s\n", argv[1]);
17+
return 1;
18+
}
19+
20+
const NSInteger width = 1200;
21+
const NSInteger height = 630;
22+
NSBitmapImageRep *bitmap = [[NSBitmapImageRep alloc]
23+
initWithBitmapDataPlanes:NULL
24+
pixelsWide:width
25+
pixelsHigh:height
26+
bitsPerSample:8
27+
samplesPerPixel:4
28+
hasAlpha:YES
29+
isPlanar:NO
30+
colorSpaceName:NSDeviceRGBColorSpace
31+
bytesPerRow:0
32+
bitsPerPixel:0
33+
];
34+
if (bitmap == nil) {
35+
fprintf(stderr, "Could not allocate the PNG canvas\n");
36+
return 1;
37+
}
38+
39+
bitmap.size = NSMakeSize(width, height);
40+
[NSGraphicsContext saveGraphicsState];
41+
NSGraphicsContext *context = [NSGraphicsContext graphicsContextWithBitmapImageRep:bitmap];
42+
[NSGraphicsContext setCurrentContext:context];
43+
[[NSColor whiteColor] setFill];
44+
NSRectFill(NSMakeRect(0, 0, width, height));
45+
[image drawInRect:NSMakeRect(0, 0, width, height)
46+
fromRect:NSZeroRect
47+
operation:NSCompositingOperationSourceOver
48+
fraction:1.0
49+
respectFlipped:YES
50+
hints:@{NSImageHintInterpolation: @(NSImageInterpolationHigh)}];
51+
[context flushGraphics];
52+
[NSGraphicsContext restoreGraphicsState];
53+
54+
NSData *png = [bitmap representationUsingType:NSBitmapImageFileTypePNG properties:@{}];
55+
if (png == nil || ![png writeToFile:outputPath atomically:YES]) {
56+
fprintf(stderr, "Could not write %s\n", argv[2]);
57+
return 1;
58+
}
59+
60+
printf("Rendered %s at 1200x630\n", argv[2]);
61+
}
62+
return 0;
63+
}

‎scripts/render-social-card.sh‎

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#!/bin/sh
2+
3+
set -eu
4+
5+
repository_root=$(CDPATH= cd -- "$(dirname "$0")/.." && pwd)
6+
renderer_binary=$(mktemp /private/tmp/native-cube-social-render.XXXXXX)
7+
trap 'rm -f "$renderer_binary"' EXIT
8+
9+
clang \
10+
-fobjc-arc \
11+
-framework AppKit \
12+
-framework Foundation \
13+
"$repository_root/scripts/render-social-card.m" \
14+
-o "$renderer_binary"
15+
16+
"$renderer_binary" \
17+
"$repository_root/assets/social/terraform-modules.svg" \
18+
"$repository_root/assets/social/terraform-modules.png"

‎scripts/seo-audit.py‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
Path("k8s-manifest-builder/index.html"): f"{SITE_URL}/k8s-manifest-builder/",
1616
Path("visual-subnet-calculator/index.html"): f"{SITE_URL}/visual-subnet-calculator/",
1717
Path("yaml-formatter/index.html"): f"{SITE_URL}/yaml-formatter/",
18+
Path("terraform-modules/index.html"): f"{SITE_URL}/terraform-modules/",
1819
}
1920
REDIRECT_PATH = Path("json-formatter/index.html")
2021
REQUIRED_META = {

0 commit comments

Comments
 (0)