mirror of
https://github.com/nestriness/nestri.git
synced 2025-12-11 00:05:36 +02:00
## Description - [x] Adds support for AWS SSO, which makes us (the team) able to use SST and update the components independently - [x] Splits the webpage into the landing page (Qwik), and Astro (the console) in charge of playing. This allows us to pass in Environment Variables to the console - ~Migrates the docs from Nuxt to Nextjs, and connects them to SST. This allows us to use Fumadocs _citation needed_ that's much more beautiful, and supports OpenApi~ - Cloudflare pages with github integration is not working on our new CF account. So we will have to push the pages deployment manually with Github actions - [x] Moves the current set up from my personal CF and AWS accounts to dedicated Nestri accounts - ## Related Issues <!-- List any related issues (e.g., "Closes #123", "Fixes #456") --> ## Type of Change - [ ] Bug fix (non-breaking change) - [x] New feature (non-breaking change) - [ ] Breaking change (fix or feature that changes existing functionality) - [x] Documentation update - [ ] Other (please describe): ## Checklist - [x] I have updated relevant documentation - [x] My code follows the project's coding style - [x] My changes generate no new warnings/errors ## Notes for Reviewers <!-- Point out areas you'd like reviewers to focus on, questions you have, or decisions that need discussion --> Please approve my PR 🥹 ## Screenshots/Demo <!-- If applicable, add screenshots or a GIF demo of your changes (especially for UI changes) --> ## Additional Context <!-- Add any other context about the pull request here -->
91 lines
2.7 KiB
TypeScript
91 lines
2.7 KiB
TypeScript
import { z } from "zod"
|
|
import { Resource } from "sst";
|
|
import { doubleFn, fn } from "../utils";
|
|
import { AwsClient } from "aws4fetch";
|
|
import { DescribeTasksCommandOutput, StopTaskCommandOutput, type RunTaskCommandOutput } from "@aws-sdk/client-ecs";
|
|
|
|
|
|
export module Aws {
|
|
export const client = async () => {
|
|
return new AwsClient({
|
|
accessKeyId: Resource.AwsAccessKey.value,
|
|
secretAccessKey: Resource.AwsSecretKey.value,
|
|
region: "us-east-1",
|
|
});
|
|
}
|
|
|
|
export const EcsRunTask = fn(z.object({
|
|
cluster: z.string(),
|
|
count: z.number(),
|
|
taskDefinition: z.string(),
|
|
launchType: z.enum(["EC2", "FARGATE"]),
|
|
overrides: z.object({
|
|
containerOverrides: z.object({
|
|
name: z.string(),
|
|
environment: z.object({
|
|
name: z.string(),
|
|
value: z.string().or(z.number())
|
|
}).array()
|
|
}).array()
|
|
})
|
|
}), async (body) => {
|
|
|
|
const c = await client();
|
|
|
|
const url = new URL(`https://ecs.${c.region}.amazonaws.com/`)
|
|
|
|
const res = await c.fetch(url, {
|
|
method: "POST",
|
|
headers: {
|
|
"X-Amz-Target": "AmazonEC2ContainerServiceV20141113.RunTask",
|
|
"Content-Type": "application/x-amz-json-1.1",
|
|
},
|
|
body: JSON.stringify(body)
|
|
})
|
|
|
|
return await res.json() as RunTaskCommandOutput
|
|
})
|
|
|
|
export const EcsDescribeTasks = fn(z.object({ tasks: z.string().array(), cluster: z.string() }), async (body) => {
|
|
const c = await client();
|
|
|
|
const url = new URL(`https://ecs.${c.region}.amazonaws.com/`)
|
|
|
|
const res = await c.fetch(url, {
|
|
method: "POST",
|
|
headers: {
|
|
"X-Amz-Target": "AmazonEC2ContainerServiceV20141113.DescribeTasks",
|
|
"Content-Type": "application/x-amz-json-1.1",
|
|
},
|
|
body: JSON.stringify(body)
|
|
})
|
|
|
|
return await res.json() as DescribeTasksCommandOutput
|
|
})
|
|
|
|
|
|
export const EcsStopTask = fn(z.object({
|
|
cluster: z.string().optional(),
|
|
reason: z.string().optional(),
|
|
task: z.string()
|
|
}), async (body) => {
|
|
const c = await client();
|
|
|
|
const url = new URL(`https://ecs.${c.region}.amazonaws.com/`)
|
|
|
|
const res = await c.fetch(url, {
|
|
method: "POST",
|
|
headers: {
|
|
"X-Amz-Target": "AmazonEC2ContainerServiceV20141113.StopTask",
|
|
"Content-Type": "application/x-amz-json-1.1",
|
|
},
|
|
body: JSON.stringify(body)
|
|
})
|
|
|
|
return await res.json() as StopTaskCommandOutput
|
|
})
|
|
|
|
}
|
|
|
|
|