Skip to content

Commit 3f446c6

Browse files
authored
infra: configure forge-test environment (#44)
* use custom storoku v0.5.1_co cost-optimization version * add test network * add references to test network services * forge-test upload-service has been deployed as w3infra * latest storoku * deploy to forge-test on releases
1 parent fc92dd7 commit 3f446c6

File tree

11 files changed

+161
-111
lines changed

11 files changed

+161
-111
lines changed

.github/workflows/deploy.yml

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ on:
2020
options:
2121
- warm-staging
2222
- forge-production
23+
- forge-test
2324

2425
permissions:
2526
id-token: write # This is required for requesting the JWT
@@ -48,7 +49,7 @@ jobs:
4849
cloudflare-zone-id: ${{ secrets.WARM_STAGING_CLOUDFLARE_ZONE_ID }}
4950
cloudflare-api-token: ${{ secrets.WARM_STAGING_CLOUDFLARE_API_TOKEN }}
5051

51-
# apply prod on successful release, plan otherwise
52+
# apply prod and test on successful release, plan otherwise
5253
forge-production:
5354
uses: ./.github/workflows/terraform.yml
5455
with:
@@ -69,3 +70,24 @@ jobs:
6970
admin-dashboard-password: ${{ secrets.FORGE_PROD_ADMIN_DASHBOARD_PASSWORD }}
7071
cloudflare-zone-id: ${{ secrets.FORGE_PROD_CLOUDFLARE_ZONE_ID }}
7172
cloudflare-api-token: ${{ secrets.FORGE_PROD_CLOUDFLARE_API_TOKEN }}
73+
74+
forge-test:
75+
uses: ./.github/workflows/terraform.yml
76+
with:
77+
env: forge-test
78+
workspace: forge-test
79+
network: test
80+
did: did:web:etracker.test.storacha.network
81+
client-egress-usd-per-tib: ${{ vars.FORGE_TEST_CLIENT_EGRESS_USD_PER_TIB }}
82+
provider-egress-usd-per-tib: ${{ vars.FORGE_TEST_PROVIDER_EGRESS_USD_PER_TIB }}
83+
apply: ${{ (github.event_name == 'workflow_run' && github.event.workflow_run.conclusion == 'success') || (github.event_name == 'workflow_dispatch' && github.event.inputs.environment == 'forge-test') }}
84+
secrets:
85+
aws-account-id: ${{ secrets.FORGE_TEST_AWS_ACCOUNT_ID }}
86+
aws-region: ${{ secrets.FORGE_TEST_AWS_REGION }}
87+
region: ${{ secrets.FORGE_TEST_AWS_REGION }}
88+
private-key: ${{ secrets.FORGE_TEST_PRIVATE_KEY }}
89+
metrics-auth-token: ${{ secrets.FORGE_TEST_METRICS_AUTH_TOKEN }}
90+
admin-dashboard-user: ${{ secrets.FORGE_TEST_ADMIN_DASHBOARD_USER }}
91+
admin-dashboard-password: ${{ secrets.FORGE_TEST_ADMIN_DASHBOARD_PASSWORD }}
92+
cloudflare-zone-id: ${{ secrets.FORGE_TEST_CLOUDFLARE_ZONE_ID }}
93+
cloudflare-api-token: ${{ secrets.FORGE_TEST_CLOUDFLARE_API_TOKEN }}

.github/workflows/terraform.yml

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -86,9 +86,6 @@ jobs:
8686
aws-region: ${{ env.AWS_REGION }}
8787
role-to-assume: arn:aws:iam::${{ env.AWS_ACCOUNT_ID }}:role/terraform-ci
8888

89-
- name: Set up Docker Buildx
90-
uses: docker/setup-buildx-action@v3
91-
9289
- uses: opentofu/setup-opentofu@v1
9390

9491
- name: Tofu Init
@@ -97,17 +94,24 @@ jobs:
9794
make init
9895
working-directory: deploy
9996

100-
- name: Build + Push Docker ECR
101-
run: |
102-
make docker-push
103-
working-directory: deploy
104-
97+
# just plan if !inputs.apply
10598
- name: Terraform Plan
10699
if: ${{ !inputs.apply }}
107100
run: |
108101
make plan
109102
working-directory: deploy
110103

104+
# build and push docker image and apply if inputs.apply
105+
- name: Set up Docker Buildx
106+
if: ${{ inputs.apply }}
107+
uses: docker/setup-buildx-action@v3
108+
109+
- name: Build + Push Docker ECR
110+
if: ${{ inputs.apply }}
111+
run: |
112+
make docker-push
113+
working-directory: deploy
114+
111115
- name: Terraform Apply
112116
if: ${{ inputs.apply }}
113117
run: |

.storoku.json

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,18 @@
1414
"secrets": [
1515
{
1616
"name": "ETRACKER_METRICS_AUTH_TOKEN",
17-
"variable": true
17+
"variable": true,
18+
"external": false
1819
},
1920
{
2021
"name": "ETRACKER_ADMIN_DASHBOARD_USER",
21-
"variable": true
22+
"variable": true,
23+
"external": false
2224
},
2325
{
2426
"name": "ETRACKER_ADMIN_DASHBOARD_PASSWORD",
25-
"variable": true
27+
"variable": true,
28+
"external": false
2629
}
2730
],
2831
"tables": [
@@ -101,7 +104,8 @@
101104
],
102105
"networks": [
103106
"warm",
104-
"forge"
107+
"forge",
108+
"test"
105109
],
106110
"writeToContainer": false
107111
}

deploy/.env.production.local.tpl

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,19 @@ if [ "$TF_WORKSPACE" == "forge-prod" ]; then
1212
CONSUMER_CUSTOMER_INDEX_NAME="customer"
1313

1414
TRUSTED_AUTHORITIES="did:web:up.forge.storacha.network"
15+
elif [ "$TF_WORKSPACE" == "forge-test" ]; then
16+
STORAGE_PROVIDER_TABLE_NAME="forge-test-w3infra-storage-provider"
17+
STORAGE_PROVIDER_TABLE_REGION="us-west-2"
18+
19+
CUSTOMER_TABLE_NAME="forge-test-w3infra-customer"
20+
CUSTOMER_TABLE_REGION="us-west-2"
21+
22+
CONSUMER_TABLE_NAME="forge-test-w3infra-consumer"
23+
CONSUMER_TABLE_REGION="us-west-2"
24+
CONSUMER_CONSUMER_INDEX_NAME="consumer"
25+
CONSUMER_CUSTOMER_INDEX_NAME="customer"
26+
27+
TRUSTED_AUTHORITIES="did:web:up.test.storacha.network"
1528
else
1629
STORAGE_PROVIDER_TABLE_NAME="staging-warm-upload-api-storage-provider"
1730
STORAGE_PROVIDER_TABLE_REGION="us-east-2"

deploy/app/.terraform.lock.hcl

Lines changed: 40 additions & 36 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

deploy/app/external.tf

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
locals {
2-
storage_provider_table_name = "${terraform.workspace == "forge-prod" ? "forge-prod-upload-api-storage-provider" : "staging-warm-upload-api-storage-provider"}"
3-
storage_provider_table_region = "${terraform.workspace == "forge-prod" ? "us-west-2" : "us-east-2"}"
2+
storage_provider_table_name = "${terraform.workspace == "forge-test" ? "forge-test-w3infra-storage-provider" : (terraform.workspace == "forge-prod" ? "forge-prod-upload-api-storage-provider" : "staging-warm-upload-api-storage-provider")}"
3+
storage_provider_table_region = "${(terraform.workspace == "forge-prod" || terraform.workspace == "forge-test") ? "us-west-2" : "us-east-2"}"
44

5-
customer_table_name = "${terraform.workspace == "forge-prod" ? "forge-prod-upload-api-customer" : "staging-warm-upload-api-customer"}"
6-
customer_table_region = "${terraform.workspace == "forge-prod" ? "us-west-2" : "us-east-2"}"
5+
customer_table_name = "${terraform.workspace == "forge-test" ? "forge-test-w3infra-customer" : (terraform.workspace == "forge-prod" ? "forge-prod-upload-api-customer" : "staging-warm-upload-api-customer")}"
6+
customer_table_region = "${(terraform.workspace == "forge-test" || terraform.workspace == "forge-prod") ? "us-west-2" : "us-east-2"}"
77

8-
consumer_table_name = "${terraform.workspace == "forge-prod" ? "forge-prod-upload-api-consumer" : "staging-warm-upload-api-consumer"}"
9-
consumer_table_region = "${terraform.workspace == "forge-prod" ? "us-west-2" : "us-east-2"}"
8+
consumer_table_name = "${terraform.workspace == "forge-test" ? "forge-test-w3infra-consumer" : (terraform.workspace == "forge-prod" ? "forge-prod-upload-api-consumer" : "staging-warm-upload-api-consumer")}"
9+
consumer_table_region = "${(terraform.workspace == "forge-test" || terraform.workspace == "forge-prod") ? "us-west-2" : "us-east-2"}"
1010
}
1111

1212
provider "aws" {

deploy/app/main.tf

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ terraform {
22
required_providers {
33
aws = {
44
source = "hashicorp/aws"
5-
version = ">= 5.86.0"
5+
version = ">= 6.0.0"
66
}
77
archive = {
88
source = "hashicorp/archive"
@@ -31,14 +31,10 @@ provider "aws" {
3131
}
3232
}
3333

34-
# CloudFront is a global service. Certs must be created in us-east-1, where the core ACM infra lives
35-
provider "aws" {
36-
region = "us-east-1"
37-
alias = "acm"
38-
}
34+
3935

4036
module "app" {
41-
source = "github.com/storacha/storoku//app?ref=v0.5.1"
37+
source = "github.com/storacha/storoku//app?ref=v0.6.2"
4238
private_key = var.private_key
4339
private_key_env_var = "ETRACKER_PRIVATE_KEY"
4440
httpport = 8080
@@ -72,6 +68,8 @@ module "app" {
7268
"ETRACKER_ADMIN_DASHBOARD_USER" = var.admin_dashboard_user
7369
"ETRACKER_ADMIN_DASHBOARD_PASSWORD" = var.admin_dashboard_password
7470
}
71+
# enter external secrets (provisioned out-of-band) here
72+
external_secrets = []
7573
# enter any sqs queues you want to create here
7674
queues = []
7775
caches = []
@@ -145,10 +143,6 @@ module "app" {
145143
]
146144
buckets = [
147145
]
148-
providers = {
149-
aws = aws
150-
aws.acm = aws.acm
151-
}
152146
env_files = var.env_files
153147
domain_base = var.domain_base
154148
}

0 commit comments

Comments
 (0)