Skip to content

Commit e9def83

Browse files
committed
add docs, dependabot & publish release workflow
1 parent a6f0ad5 commit e9def83

10 files changed

Lines changed: 558 additions & 1 deletion

File tree

.github/dependabot.yml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
version: 2
2+
updates:
3+
- package-ecosystem: "terraform"
4+
directories:
5+
- "/modules/*"
6+
schedule:
7+
interval: "weekly"
8+
day: "sunday"
9+
groups:
10+
terraform-providers:
11+
patterns:
12+
- "*"
13+
update-types:
14+
- "minor"
15+
- "patch"

.github/publish-release.yml

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
name: Publish Release
2+
3+
on:
4+
workflow_dispatch:
5+
inputs:
6+
version:
7+
description: 'Version tag for the release (e.g., 2026-02-16)'
8+
required: true
9+
type: string
10+
11+
permissions:
12+
contents: write
13+
id-token: write
14+
attestations: write
15+
16+
env:
17+
TOFU_VERSION: "1.11.4"
18+
19+
jobs:
20+
validate-modules:
21+
name: Format and Validate Modules
22+
runs-on: ubuntu-latest
23+
if: github.ref == 'refs/heads/main'
24+
steps:
25+
- name: Checkout repository
26+
uses: actions/checkout@v4
27+
28+
- name: Setup OpenTofu
29+
uses: opentofu/setup-opentofu@v1
30+
with:
31+
tofu_version: ${{ env.TOFU_VERSION }}
32+
33+
- name: Initialize and validate all modules
34+
run: |
35+
echo "Initializing and validating all Terraform modules..."
36+
failed_modules=""
37+
38+
for module in modules/*/; do
39+
echo "============================================"
40+
echo "Processing: $module"
41+
echo "============================================"
42+
43+
cd "$module"
44+
45+
echo "Running tofu init..."
46+
if ! tofu init -backend=false; then
47+
echo "::error::tofu init failed for $module"
48+
failed_modules="$failed_modules $module"
49+
cd - > /dev/null
50+
continue
51+
fi
52+
53+
echo "Running tofu validate..."
54+
if ! tofu validate; then
55+
echo "::error::tofu validate failed for $module"
56+
failed_modules="$failed_modules $module"
57+
else
58+
echo "✓ $module validated successfully"
59+
fi
60+
61+
cd - > /dev/null
62+
done
63+
64+
if [[ -n "$failed_modules" ]]; then
65+
echo "::error::The following modules failed validation:$failed_modules"
66+
exit 1
67+
fi
68+
69+
echo "All modules validated successfully!"
70+
71+
- name: Determine version
72+
id: version
73+
run: |
74+
if [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then
75+
VERSION="${{ inputs.version }}"
76+
else
77+
VERSION="${{ github.ref_name }}"
78+
fi
79+
echo "version=$VERSION" >> $GITHUB_OUTPUT
80+
echo "Release version: $VERSION"
81+
82+
- name: Create GitHub Release
83+
env:
84+
GH_TOKEN: ${{ github.token }}
85+
run: |
86+
VERSION="${{ steps.version.outputs.version }}"
87+
88+
gh release create "$VERSION" \
89+
--title "$VERSION" \
90+
--generate-notes \
91+
$PRERELEASE_FLAG
92+
93+
- name: Download release artifacts for attestation
94+
env:
95+
GH_TOKEN: ${{ github.token }}
96+
run: |
97+
VERSION="${{ steps.version.outputs.version }}"
98+
mkdir -p release-artifacts
99+
gh release download "$VERSION" --archive=tar.gz --dir release-artifacts
100+
gh release download "$VERSION" --archive=zip --dir release-artifacts
101+
ls -la release-artifacts/
102+
103+
- name: Generate provenance attestation
104+
id: attestation
105+
uses: actions/attest-build-provenance@977bb373ede98d70efdf65b84cb5f73e068dcc2a # v3.0.0
106+
with:
107+
subject-path: release-artifacts/*
108+
109+
- name: Upload attestation to release
110+
env:
111+
GH_TOKEN: ${{ github.token }}
112+
run: |
113+
VERSION="${{ steps.version.outputs.version }}"
114+
gh release upload "$VERSION" "${{ steps.attestation.outputs.bundle-path }}" --clobber

README.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,3 +64,29 @@ Contributions are welcome! Please feel free to submit a Pull Request.
6464
## 📄 License
6565

6666
This project is licensed under the Apache 2.0 License - see the [LICENSE](LICENSE) file for details.
67+
68+
<!-- BEGIN_TF_DOCS -->
69+
### Requirements
70+
71+
No requirements.
72+
73+
### Providers
74+
75+
No providers.
76+
77+
### Modules
78+
79+
No modules.
80+
81+
### Resources
82+
83+
No resources.
84+
85+
### Inputs
86+
87+
No inputs.
88+
89+
### Outputs
90+
91+
No outputs.
92+
<!-- END_TF_DOCS -->
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
<!-- BEGIN_TF_DOCS -->
2+
### Requirements
3+
4+
| Name | Version |
5+
|------|---------|
6+
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 1.10 |
7+
| <a name="requirement_stackit"></a> [stackit](#requirement\_stackit) | 0.83.0 |
8+
9+
### Providers
10+
11+
| Name | Version |
12+
|------|---------|
13+
| <a name="provider_stackit"></a> [stackit](#provider\_stackit) | 0.83.0 |
14+
15+
### Modules
16+
17+
No modules.
18+
19+
### Resources
20+
21+
| Name | Type |
22+
|------|------|
23+
| [stackit_network_area.areas](https://registry.terraform.io/providers/stackitcloud/stackit/0.83.0/docs/resources/network_area) | resource |
24+
| [stackit_network_area_region.areas](https://registry.terraform.io/providers/stackitcloud/stackit/0.83.0/docs/resources/network_area_region) | resource |
25+
26+
### Inputs
27+
28+
| Name | Description | Type | Default | Required |
29+
|------|-------------|------|---------|:--------:|
30+
| <a name="input_company_code"></a> [company\_code](#input\_company\_code) | Company code used in resource naming conventions. | `string` | n/a | yes |
31+
| <a name="input_company_name"></a> [company\_name](#input\_company\_name) | Name of the company folder to create. | `string` | n/a | yes |
32+
| <a name="input_network_areas"></a> [network\_areas](#input\_network\_areas) | List of network areas to create, each with its own name, ranges, and configuration. | <pre>list(object({<br/> name = string<br/> network_ranges = list(object({ prefix = string }))<br/> transfer_network_range = string<br/> max_prefix_length = optional(number, 28)<br/> min_prefix_length = optional(number, 24)<br/> default_prefix_length = optional(number, 28)<br/> default_nameservers = optional(list(string), null)<br/> }))</pre> | n/a | yes |
33+
| <a name="input_organization_id"></a> [organization\_id](#input\_organization\_id) | Container ID of the root folder or organization under which the company folder will be created. | `string` | n/a | yes |
34+
| <a name="input_owner_email"></a> [owner\_email](#input\_owner\_email) | Email address of the owner for the folders. Required for STACKIT resource manager. | `string` | n/a | yes |
35+
| <a name="input_parent_container_id"></a> [parent\_container\_id](#input\_parent\_container\_id) | Parent container ID (folder or organization) where the project will be created. | `string` | n/a | yes |
36+
| <a name="input_project_code"></a> [project\_code](#input\_project\_code) | Optional project code for the STACKIT project. | `string` | n/a | yes |
37+
| <a name="input_project_name"></a> [project\_name](#input\_project\_name) | Name of the STACKIT project to create. | `string` | n/a | yes |
38+
| <a name="input_allowed_network_ranges"></a> [allowed\_network\_ranges](#input\_allowed\_network\_ranges) | List of allowed network ranges for Git instance ACL. | `list(string)` | <pre>[<br/> "0.0.0.0/0"<br/>]</pre> | no |
39+
| <a name="input_env"></a> [env](#input\_env) | Environment identifier (e.g., dev, staging, prod) used in resource naming conventions. | `string` | `"dev"` | no |
40+
| <a name="input_labels"></a> [labels](#input\_labels) | Additional labels to apply to all folders. | `map(string)` | `{}` | no |
41+
| <a name="input_network_area_id"></a> [network\_area\_id](#input\_network\_area\_id) | Network Area ID to deploy resources into. Required if network is enabled. | `string` | `null` | no |
42+
| <a name="input_organization_auditors"></a> [organization\_auditors](#input\_organization\_auditors) | List of organization role assignments for organization auditors. | `list(string)` | `[]` | no |
43+
| <a name="input_organization_owners"></a> [organization\_owners](#input\_organization\_owners) | List of organization role assignments for organization owners. | `list(string)` | `[]` | no |
44+
| <a name="input_region"></a> [region](#input\_region) | STACKIT region for regional resources. | `string` | `"eu01"` | no |
45+
| <a name="input_role_assignments"></a> [role\_assignments](#input\_role\_assignments) | List of role assignments for the project. Subject can be a user email or service account email. | <pre>list(object({<br/> role = string<br/> subject = string<br/> }))</pre> | `[]` | no |
46+
47+
### Outputs
48+
49+
| Name | Description |
50+
|------|-------------|
51+
| <a name="output_network_area_ids"></a> [network\_area\_ids](#output\_network\_area\_ids) | Map of network area names to their IDs. |
52+
<!-- END_TF_DOCS -->

modules/connectivity-region/README.md

Lines changed: 66 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,4 +43,69 @@ Set default password for admin to STACKIT123!
4343
Disabled Referer-Check
4444
Enable allow all wan adresses to connect to the WebUI
4545

46-
Now you can enter the WebUI via the FloatingIP on port 443 the default login is admin:STACKIT123!
46+
Now you can enter the WebUI via the FloatingIP on port 443 the default login is admin:STACKIT123!
47+
<!-- BEGIN_TF_DOCS -->
48+
### Requirements
49+
50+
| Name | Version |
51+
|------|---------|
52+
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 1.10 |
53+
| <a name="requirement_stackit"></a> [stackit](#requirement\_stackit) | 0.83.0 |
54+
55+
### Providers
56+
57+
| Name | Version |
58+
|------|---------|
59+
| <a name="provider_stackit"></a> [stackit](#provider\_stackit) | 0.83.0 |
60+
61+
### Modules
62+
63+
No modules.
64+
65+
### Resources
66+
67+
| Name | Type |
68+
|------|------|
69+
| [stackit_authorization_project_role_assignment.assignments](https://registry.terraform.io/providers/stackitcloud/stackit/0.83.0/docs/resources/authorization_project_role_assignment) | resource |
70+
| [stackit_image.pfsense_image](https://registry.terraform.io/providers/stackitcloud/stackit/0.83.0/docs/resources/image) | resource |
71+
| [stackit_network.lan](https://registry.terraform.io/providers/stackitcloud/stackit/0.83.0/docs/resources/network) | resource |
72+
| [stackit_network.wan](https://registry.terraform.io/providers/stackitcloud/stackit/0.83.0/docs/resources/network) | resource |
73+
| [stackit_network_area_route.default](https://registry.terraform.io/providers/stackitcloud/stackit/0.83.0/docs/resources/network_area_route) | resource |
74+
| [stackit_network_interface.lan](https://registry.terraform.io/providers/stackitcloud/stackit/0.83.0/docs/resources/network_interface) | resource |
75+
| [stackit_network_interface.wan](https://registry.terraform.io/providers/stackitcloud/stackit/0.83.0/docs/resources/network_interface) | resource |
76+
| [stackit_public_ip.wan-ip](https://registry.terraform.io/providers/stackitcloud/stackit/0.83.0/docs/resources/public_ip) | resource |
77+
| [stackit_resourcemanager_project.project](https://registry.terraform.io/providers/stackitcloud/stackit/0.83.0/docs/resources/resourcemanager_project) | resource |
78+
| [stackit_server.pfsense_Server](https://registry.terraform.io/providers/stackitcloud/stackit/0.83.0/docs/resources/server) | resource |
79+
| [stackit_volume.pfsense_vol](https://registry.terraform.io/providers/stackitcloud/stackit/0.83.0/docs/resources/volume) | resource |
80+
81+
### Inputs
82+
83+
| Name | Description | Type | Default | Required |
84+
|------|-------------|------|---------|:--------:|
85+
| <a name="input_company_code"></a> [company\_code](#input\_company\_code) | Company code used in resource naming conventions. | `string` | n/a | yes |
86+
| <a name="input_company_name"></a> [company\_name](#input\_company\_name) | Name of the company folder to create. | `string` | n/a | yes |
87+
| <a name="input_network_area_id"></a> [network\_area\_id](#input\_network\_area\_id) | Network Area ID to deploy resources into. Required if network is enabled. | `string` | n/a | yes |
88+
| <a name="input_organization_id"></a> [organization\_id](#input\_organization\_id) | Organization ID, required for network area route configuration. | `string` | n/a | yes |
89+
| <a name="input_owner_email"></a> [owner\_email](#input\_owner\_email) | Email address of the owner for the folders. Required for STACKIT resource manager. | `string` | n/a | yes |
90+
| <a name="input_parent_container_id"></a> [parent\_container\_id](#input\_parent\_container\_id) | Parent container ID (folder or organization) where the project will be created. | `string` | n/a | yes |
91+
| <a name="input_project_code"></a> [project\_code](#input\_project\_code) | Optional project code for the STACKIT project. | `string` | n/a | yes |
92+
| <a name="input_project_name"></a> [project\_name](#input\_project\_name) | Name of the STACKIT project to create. | `string` | n/a | yes |
93+
| <a name="input_env"></a> [env](#input\_env) | Environment identifier (e.g., dev, staging, prod) used in resource naming conventions. | `string` | `"dev"` | no |
94+
| <a name="input_firewall_flavor"></a> [firewall\_flavor](#input\_firewall\_flavor) | Firewall VM Flavor | `string` | `"c1.2"` | no |
95+
| <a name="input_firewall_ip"></a> [firewall\_ip](#input\_firewall\_ip) | IP address of the firewall | `string` | `"10.0.0.220"` | no |
96+
| <a name="input_firewall_zone"></a> [firewall\_zone](#input\_firewall\_zone) | STACKIT Availability Zone | `string` | `"eu01-m"` | no |
97+
| <a name="input_labels"></a> [labels](#input\_labels) | Additional labels to apply to all folders. | `map(string)` | `{}` | no |
98+
| <a name="input_region"></a> [region](#input\_region) | STACKIT region for regional resources. | `string` | `"eu01"` | no |
99+
| <a name="input_role_assignments"></a> [role\_assignments](#input\_role\_assignments) | List of role assignments for the project. Subject can be a user email or service account email. | <pre>list(object({<br/> role = string<br/> subject = string<br/> }))</pre> | `[]` | no |
100+
| <a name="input_vnet_range"></a> [vnet\_range](#input\_vnet\_range) | CIDR range for the project VNet. Required if network is enabled. | `string` | `"10.0.0.0/24"` | no |
101+
102+
### Outputs
103+
104+
| Name | Description |
105+
|------|-------------|
106+
| <a name="output_pfsense_public_ip"></a> [pfsense\_public\_ip](#output\_pfsense\_public\_ip) | The public IP address of the pfSense firewall WAN interface. |
107+
| <a name="output_pfsense_wan_ip"></a> [pfsense\_wan\_ip](#output\_pfsense\_wan\_ip) | The internal network area IP of the pfSense WAN interface (used as next hop in routes). |
108+
| <a name="output_project_container_id"></a> [project\_container\_id](#output\_project\_container\_id) | The container ID of the created STACKIT project. |
109+
| <a name="output_project_id"></a> [project\_id](#output\_project\_id) | The project ID of the created STACKIT project. |
110+
| <a name="output_project_name"></a> [project\_name](#output\_project\_name) | The name of the created STACKIT project. |
111+
<!-- END_TF_DOCS -->

modules/devops/README.md

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
<!-- BEGIN_TF_DOCS -->
2+
### Requirements
3+
4+
| Name | Version |
5+
|------|---------|
6+
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 1.10 |
7+
| <a name="requirement_stackit"></a> [stackit](#requirement\_stackit) | 0.83.0 |
8+
9+
### Providers
10+
11+
| Name | Version |
12+
|------|---------|
13+
| <a name="provider_stackit"></a> [stackit](#provider\_stackit) | 0.83.0 |
14+
15+
### Modules
16+
17+
No modules.
18+
19+
### Resources
20+
21+
| Name | Type |
22+
|------|------|
23+
| [stackit_authorization_project_role_assignment.assignments](https://registry.terraform.io/providers/stackitcloud/stackit/0.83.0/docs/resources/authorization_project_role_assignment) | resource |
24+
| [stackit_git.git](https://registry.terraform.io/providers/stackitcloud/stackit/0.83.0/docs/resources/git) | resource |
25+
| [stackit_resourcemanager_project.project](https://registry.terraform.io/providers/stackitcloud/stackit/0.83.0/docs/resources/resourcemanager_project) | resource |
26+
27+
### Inputs
28+
29+
| Name | Description | Type | Default | Required |
30+
|------|-------------|------|---------|:--------:|
31+
| <a name="input_company_code"></a> [company\_code](#input\_company\_code) | Company code used in resource naming conventions. | `string` | n/a | yes |
32+
| <a name="input_company_name"></a> [company\_name](#input\_company\_name) | Name of the company folder to create. | `string` | n/a | yes |
33+
| <a name="input_organization_id"></a> [organization\_id](#input\_organization\_id) | Container ID of the root folder or organization under which the company folder will be created. | `string` | n/a | yes |
34+
| <a name="input_owner_email"></a> [owner\_email](#input\_owner\_email) | Email address of the owner for the folders. Required for STACKIT resource manager. | `string` | n/a | yes |
35+
| <a name="input_parent_container_id"></a> [parent\_container\_id](#input\_parent\_container\_id) | Parent container ID (folder or organization) where the project will be created. | `string` | n/a | yes |
36+
| <a name="input_project_code"></a> [project\_code](#input\_project\_code) | Optional project code for the STACKIT project. | `string` | n/a | yes |
37+
| <a name="input_project_name"></a> [project\_name](#input\_project\_name) | Name of the STACKIT project to create. | `string` | n/a | yes |
38+
| <a name="input_allowed_network_ranges"></a> [allowed\_network\_ranges](#input\_allowed\_network\_ranges) | List of allowed network ranges for Git instance ACL. | `list(string)` | <pre>[<br/> "0.0.0.0/0"<br/>]</pre> | no |
39+
| <a name="input_env"></a> [env](#input\_env) | Environment identifier (e.g., dev, staging, prod) used in resource naming conventions. | `string` | `"dev"` | no |
40+
| <a name="input_git_flavor"></a> [git\_flavor](#input\_git\_flavor) | The flavor of the Git instance. | `string` | `null` | no |
41+
| <a name="input_labels"></a> [labels](#input\_labels) | Additional labels to apply to all folders. | `map(string)` | `{}` | no |
42+
| <a name="input_network_area_id"></a> [network\_area\_id](#input\_network\_area\_id) | Network Area ID to deploy resources into. Required if network is enabled. | `string` | `null` | no |
43+
| <a name="input_organization_auditors"></a> [organization\_auditors](#input\_organization\_auditors) | List of organization role assignments for organization auditors. | `list(string)` | `[]` | no |
44+
| <a name="input_organization_owners"></a> [organization\_owners](#input\_organization\_owners) | List of organization role assignments for organization owners. | `list(string)` | `[]` | no |
45+
| <a name="input_region"></a> [region](#input\_region) | STACKIT region for regional resources. | `string` | `"eu01"` | no |
46+
| <a name="input_role_assignments"></a> [role\_assignments](#input\_role\_assignments) | List of role assignments for the project. Subject can be a user email or service account email. | <pre>list(object({<br/> role = string<br/> subject = string<br/> }))</pre> | `[]` | no |
47+
48+
### Outputs
49+
50+
| Name | Description |
51+
|------|-------------|
52+
| <a name="output_project_container_id"></a> [project\_container\_id](#output\_project\_container\_id) | The container ID of the created STACKIT project. |
53+
| <a name="output_project_id"></a> [project\_id](#output\_project\_id) | The project ID of the created STACKIT project. |
54+
| <a name="output_project_name"></a> [project\_name](#output\_project\_name) | The name of the created STACKIT project. |
55+
<!-- END_TF_DOCS -->

0 commit comments

Comments
 (0)