Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
80 commits
Select commit Hold shift + click to select a range
f025a25
start work on events
zjaco13 Jan 23, 2025
38e6abd
old cloudevents stuff
zjaco13 Feb 20, 2025
0cd7ff6
Merge branch 'main' into feat/dora-metrics
zjaco13 Feb 26, 2025
6e1140d
remove cloud events and switch to devlake
zjaco13 Mar 5, 2025
25263e9
devlake integ work
zjaco13 Mar 7, 2025
f05fe33
Merge branch 'dev' into feat/dora-metrics
zjaco13 Mar 17, 2025
9d6c457
devlake fixes
zjaco13 Mar 17, 2025
c6499c0
add env to ui
zjaco13 Mar 17, 2025
206e1a5
get rid of ingress
zjaco13 Mar 18, 2025
b94850e
fix kyverno
zjaco13 Mar 18, 2025
40cd482
export mysql for grafana
zjaco13 Mar 18, 2025
1d68307
fixes for mysql
zjaco13 Mar 18, 2025
6dddfd1
more changes for grafana and devlake
zjaco13 Mar 19, 2025
b37eccc
amg tf changes
zjaco13 Mar 19, 2025
546f5f6
changes for grafana
zjaco13 Mar 19, 2025
0f30b35
fix security group
zjaco13 Mar 19, 2025
46fc48d
Merge branch 'dev' into feat/dora-metrics
zjaco13 Mar 20, 2025
d501b6d
fix grafana security group and dora dashboards
zjaco13 Mar 21, 2025
be7bb7c
start devlake init
zjaco13 Mar 24, 2025
d84299e
rename
zjaco13 Mar 25, 2025
16314ce
Merge branch 'dev' into feat/dora-metrics
zjaco13 Mar 25, 2025
026d41a
script fixes
zjaco13 Mar 26, 2025
825d5fd
Merge branch 'dev' into feat/dora-metrics
zjaco13 Mar 26, 2025
0c818fe
start backstage template for onboarding
zjaco13 Apr 2, 2025
98acf2b
updates to backstage templates
zjaco13 Apr 3, 2025
83016cf
start move to templates for cicd
zjaco13 Apr 3, 2025
84ca342
Merge branch 'fix/cicd-templates' into feat/dora-metrics
zjaco13 Apr 3, 2025
76c3a74
changes for move to rds
zjaco13 Apr 7, 2025
feacb2e
setup environment config for crossplane on mgmt cluster
zjaco13 Apr 17, 2025
50a3e82
add readme about env config
zjaco13 Apr 18, 2025
4691ca3
fix subnets and yq
zjaco13 Apr 7, 2025
a554bb8
testing for dora
zjaco13 Apr 8, 2025
510e7c5
changes to autogen rds
zjaco13 Apr 11, 2025
5332041
fix mysql component
zjaco13 Apr 15, 2025
237a698
change to crossplane xrd with environment config
zjaco13 Apr 16, 2025
60cd03a
get rid of patch
zjaco13 Apr 16, 2025
471fb2c
Merge branch 'dev' into feat-dora-metrics
zjaco13 Apr 17, 2025
e60a4be
add more subnets to env config
zjaco13 Apr 17, 2025
d3dca0f
fix dbname
zjaco13 Apr 17, 2025
c40eb30
get rid of connection secrets for resources that don't need
zjaco13 Apr 17, 2025
db326ab
fix job
zjaco13 Apr 17, 2025
0c991b9
fix dburl
zjaco13 Apr 17, 2025
7b1c955
Update catalog-info.yaml
zjaco13 Apr 18, 2025
1857497
fix ordering
zjaco13 Apr 18, 2025
9c360eb
fix provisioner
zjaco13 Apr 18, 2025
f1d9129
final fixes
zjaco13 Apr 19, 2025
25069b6
init devlake with data
zjaco13 Apr 19, 2025
3821a70
revert hardcode
zjaco13 Apr 19, 2025
140d979
script fixes
zjaco13 Apr 21, 2025
314ebda
final fixes
zjaco13 Apr 22, 2025
21f034f
change to env selector and yaml.gen
zjaco13 Apr 23, 2025
0ab29b3
get mysql envconfig example
zjaco13 Apr 23, 2025
c79a871
add vela templates and add label to composition
zjaco13 Apr 23, 2025
bd7e778
changes to fix environment config selection
zjaco13 Apr 24, 2025
44aa355
Merge branch 'feat/mgmt-env-config' into feat/dora-metrics
zjaco13 Apr 25, 2025
8864669
Fixed NextJS UX issue where they loaded the website before starting t…
5herlocked May 8, 2025
e9251f5
Merge pull request #236 from aws-samples/fix/next-js-404
shapirov103 May 8, 2025
03b5ce7
fix definition
zjaco13 May 8, 2025
641f0b9
fix devlake update
zjaco13 May 8, 2025
05adb55
Merge pull request #230 from aws-samples/feat/mgmt-env-config
elamaran11 May 9, 2025
763c320
switch to workflow from job
zjaco13 May 15, 2025
31e593f
Merge branch 'dev' into feat-dora-metrics
zjaco13 May 22, 2025
d76b928
attempt fix for workflow
zjaco13 May 29, 2025
fbc5d30
fix for workflow
zjaco13 May 29, 2025
202f1c2
switch to new serviceaccount
zjaco13 May 29, 2025
b6efd4d
Fixed sed command to work for Mac and Linux
mani-marothu-scf-guest Jun 3, 2025
9a56547
Merge pull request #242 from mmaroth/fix-backstage-hostname
elamaran11 Jun 3, 2025
65072fe
Changes for EKS 1.32 upgrade for child clusters
hmuthusamy Jun 3, 2025
ce88f63
Merge pull request #243 from hmuthusamy/feature/eks-child-cluster-1.32
shapirov103 Jun 3, 2025
8379062
fix exit handler for failed deploy
zjaco13 Jun 9, 2025
59f247d
upgrade to devlake beta version
zjaco13 Jun 17, 2025
d1255c7
update ui image
zjaco13 Jun 17, 2025
2cd83e1
Merge branch 'main' into feat-dora-metrics
zjaco13 Jun 26, 2025
3069cb0
remove unused files
zjaco13 Aug 21, 2025
3bdee8d
Merge branch 'dev' into feat-dora-metrics
zjaco13 Sep 24, 2025
10d9832
Merge pull request #246 from aws-samples/feat-dora-metrics
zjaco13 Sep 24, 2025
38e0818
Merge branch 'main' into dev
zjaco13 Sep 24, 2025
3096693
update aurora version
zjaco13 Sep 25, 2025
55b713a
devlake depends on crossplane providers and compositions
zjaco13 Sep 25, 2025
0e294b6
fix rust dashboard timeout
zjaco13 Oct 13, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions applications/dotnet/src/WebUI/otel-collector-config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ exporters:
authenticator: sigv4auth
awsxray:
region: us-east-1
logging:
loglevel: debug
debug:
verbosity: detailed
extensions:
sigv4auth:
region: us-east-1
Expand Down
24 changes: 12 additions & 12 deletions applications/next-js/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM node:18-alpine AS base
FROM node:20-alpine AS base

# Install dependencies only when needed
FROM base AS deps
Expand All @@ -9,11 +9,11 @@ WORKDIR /app
# Install dependencies based on the preferred package manager
COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* ./
RUN \
if [ -f yarn.lock ]; then yarn --frozen-lockfile; \
elif [ -f package-lock.json ]; then npm ci; \
elif [ -f pnpm-lock.yaml ]; then corepack enable pnpm && pnpm i --frozen-lockfile; \
else echo "Lockfile not found." && exit 1; \
fi
if [ -f yarn.lock ]; then yarn --frozen-lockfile; \
elif [ -f package-lock.json ]; then npm ci; \
elif [ -f pnpm-lock.yaml ]; then corepack enable pnpm && pnpm i --frozen-lockfile; \
else echo "Lockfile not found." && exit 1; \
fi


# Rebuild the source code only when needed
Expand All @@ -28,11 +28,11 @@ COPY . .
ENV NEXT_TELEMETRY_DISABLED=1

RUN \
if [ -f yarn.lock ]; then yarn run build; \
elif [ -f package-lock.json ]; then npm run build; \
elif [ -f pnpm-lock.yaml ]; then corepack enable pnpm && pnpm run build; \
else echo "Lockfile not found." && exit 1; \
fi
if [ -f yarn.lock ]; then yarn run build; \
elif [ -f package-lock.json ]; then npm run build; \
elif [ -f pnpm-lock.yaml ]; then corepack enable pnpm && pnpm run build; \
else echo "Lockfile not found." && exit 1; \
fi

# Production image, copy all the files and run next
FROM base AS runner
Expand Down Expand Up @@ -65,4 +65,4 @@ ENV PORT=8080
# server.js is created by next build from the standalone output
# https://nextjs.org/docs/pages/api-reference/next-config-js/output
ENV HOSTNAME="0.0.0.0"
CMD ["node", "server.js"]
CMD ["node", "server.js"]
14 changes: 5 additions & 9 deletions applications/next-js/app/[page]/page.tsx
Original file line number Diff line number Diff line change
@@ -1,15 +1,11 @@
import Prose from "components/prose";
import { getPage } from "lib/dynamo";
import { notFound } from "next/navigation";
import Prose from 'components/prose';
import { getPage } from 'lib/dynamo';
import { notFound } from 'next/navigation';

export default async function Page({ params }: { params: { page: string } }) {
const page = await getPage(params.page);

if (!page) return notFound();
if (!page || page instanceof Error) return notFound();

return (
<>

</>
);
return <></>;
}
17 changes: 17 additions & 0 deletions applications/next-js/app/backend-down.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import React from 'react';

export default function NotFound() {
return (
<div className="flex min-h-screen flex-col items-center justify-center bg-white">
<div className="flex max-w-md flex-col items-center px-4 py-8">
<div className="mb-8 flex items-center">
<h1 className="mr-4 text-5xl font-bold text-gray-800">500</h1>
<div className="h-12 border-l border-gray-300"></div>
<p className="ml-4 text-xl text-gray-600">
Looks like the backend is down, please deploy it and try again!
</p>
</div>
</div>
</div>
);
}
6 changes: 3 additions & 3 deletions applications/next-js/app/page.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import Footer from "components/layout/footer";
import { Carousel } from "components/carousel";
import { ThreeItemGrid } from "components/grid/three-items";
import Footer from 'components/layout/footer';
import { Carousel } from 'components/carousel';
import { ThreeItemGrid } from 'components/grid/three-items';

export default async function HomePage() {
return (
Expand Down
39 changes: 18 additions & 21 deletions applications/next-js/app/product/[handle]/page.tsx
Original file line number Diff line number Diff line change
@@ -1,38 +1,35 @@
import { notFound } from "next/navigation";
import { notFound } from 'next/navigation';

import { GridTileImage } from "components/grid/tile";
import Footer from "components/layout/footer";
import { Gallery } from "components/product/gallery";
import { ProductDescription } from "components/product/product-description";
import { HIDDEN_PRODUCT_TAG } from "lib/constants";
import { getProduct } from "lib/dynamo";
import { Image } from "lib/dynamo/types";
import Link from "next/link";
import { Suspense } from "react";
import { GridTileImage } from 'components/grid/tile';
import Footer from 'components/layout/footer';
import { Gallery } from 'components/product/gallery';
import { ProductDescription } from 'components/product/product-description';
import { HIDDEN_PRODUCT_TAG } from 'lib/constants';
import { getProduct } from 'lib/dynamo';
import { Image } from 'lib/dynamo/types';
import Link from 'next/link';
import { Suspense } from 'react';
import NotFound from 'app/backend-down';

export default async function ProductPage({
params,
}: {
params: { handle: string };
}) {
export default async function ProductPage({ params }: { params: { handle: string } }) {
const product = await getProduct(params.handle);

if (!product) return notFound();
if (!product || product instanceof Error) return NotFound();

const productJsonLd = {
"@context": "https://schema.org",
"@type": "Product",
'@context': 'https://schema.org',
'@type': 'Product',
name: product.name,
description: product.description,
image: product.images,
image: product.images
};

return (
<>
<script
type="application/ld+json"
dangerouslySetInnerHTML={{
__html: JSON.stringify(productJsonLd),
__html: JSON.stringify(productJsonLd)
}}
/>
<div className="mx-auto max-w-screen-2xl px-4">
Expand All @@ -46,7 +43,7 @@ export default async function ProductPage({
<Gallery
images={product.images.map((image: Image) => ({
src: image.url,
altText: image.altText,
altText: image.altText
}))}
/>
</Suspense>
Expand Down
19 changes: 12 additions & 7 deletions applications/next-js/app/search/[collection]/page.tsx
Original file line number Diff line number Diff line change
@@ -1,21 +1,26 @@
import { getCategory, getCategoryProducts } from "lib/dynamo";
import { getCategory, getCategoryProducts } from 'lib/dynamo';

import Grid from "components/grid";
import ProductGridItems from "components/layout/product-grid-items";
import { defaultSort, sorting } from "lib/constants";
import Grid from 'components/grid';
import ProductGridItems from 'components/layout/product-grid-items';
import { defaultSort, sorting } from 'lib/constants';
import { notFound } from 'next/navigation';
import NotFound from 'app/backend-down';

export default async function CategoryPage({
params,
searchParams,
searchParams
}: {
params: { collection: string };
searchParams?: { [key: string]: string | string[] | undefined };
}) {
const { sort } = searchParams as { [key: string]: string };
const { sortKey, reverse } =
sorting.find((item) => item.slug === sort) || defaultSort;
const { sortKey, reverse } = sorting.find((item) => item.slug === sort) || defaultSort;
const products = await getCategoryProducts(params.collection);

if (products instanceof Error) {
return NotFound();
}

return (
<section>
{products.length === 0 ? (
Expand Down
26 changes: 16 additions & 10 deletions applications/next-js/app/search/page.tsx
Original file line number Diff line number Diff line change
@@ -1,26 +1,32 @@
import Grid from "components/grid";
import ProductGridItems from "components/layout/product-grid-items";
import { defaultSort, sorting } from "lib/constants";
import { getProducts } from "lib/dynamo";
import NotFound from 'app/backend-down';
import Grid from 'components/grid';
import ProductGridItems from 'components/layout/product-grid-items';
import { defaultSort, sorting } from 'lib/constants';
import { getProducts } from 'lib/dynamo';
import { notFound } from 'next/navigation';

export default async function SearchPage({
searchParams,
searchParams
}: {
searchParams?: { [key: string]: string | string[] | undefined };
}) {
const { sort, q: searchValue } = searchParams as { [key: string]: string };
const { sortKey, reverse } =
sorting.find((item) => item.slug === sort) || defaultSort;
const { sortKey, reverse } = sorting.find((item) => item.slug === sort) || defaultSort;

const products = await getProducts(searchValue ?? "");
const resultsText = products.length > 1 ? "results" : "result";
const products = await getProducts(searchValue ?? '');

if (products instanceof Error) {
return NotFound();
}

const resultsText = products.length > 1 ? 'results' : 'result';

return (
<>
{searchValue ? (
<p className="mb-4">
{products.length === 0
? "There are no products that match "
? 'There are no products that match '
: `Showing ${products.length} ${resultsText} for `}
<span className="font-bold">&quot;{searchValue}&quot;</span>
</p>
Expand Down
19 changes: 9 additions & 10 deletions applications/next-js/components/carousel.tsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
import {getCategoryProducts, getCollection} from "lib/dynamo";
import Link from "next/link";
import { GridTileImage } from "./grid/tile";
import { getCategoryProducts, getCollection } from 'lib/dynamo';
import Link from 'next/link';
import { GridTileImage } from './grid/tile';
import { notFound } from 'next/navigation';
import NotFound from 'app/backend-down';

export async function Carousel() {
// Collections that start with `hidden-*` are hidden from the search page.
const products = await getCollection("FRONT_PAGE");
const products = await getCollection('FRONT_PAGE');

if (!products?.length) return null;
if (products instanceof Error || !products?.length) return NotFound();

// Purposefully duplicating products to make the carousel loop and not run out of products on wide screens.
const carouselProducts = [...products, ...products, ...products];
Expand All @@ -19,16 +21,13 @@ export async function Carousel() {
key={`${product.id}${i}`}
className="relative aspect-square h-[30vh] max-h-[275px] w-2/3 max-w-[475px] flex-none md:w-1/3"
>
<Link
href={`/product/${product.id}`}
className="relative h-full w-full"
>
<Link href={`/product/${product.id}`} className="relative h-full w-full">
<GridTileImage
alt={product.name}
label={{
title: product.name,
amount: product.price,
currencyCode: "USD",
currencyCode: 'USD'
}}
src={product.images[0]!.url!}
fill
Expand Down
36 changes: 26 additions & 10 deletions applications/next-js/components/cart/actions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,61 +7,77 @@ import { cookies } from 'next/headers';
import { CartProduct, Product, ProductVariants } from '../../lib/dynamo/types';

export async function addItem(prevState: any, cartItem: CartProduct) {
let cartId = cookies().get('cartId')?.value;
let cartId = (await cookies()).get('cartId')?.value;
let cart;

if (cartId) {
cart = await getCart(cartId);
}

if (!cartId || !cart) {
cart = await createCart();
if (!cartId || !cart || cart instanceof Error) {
const cartResult = await createCart();
if (cartResult instanceof Error) {
return 'Error creating cart';
}
cart = cartResult;
cartId = cart.id;
cookies().set('cartId', cartId);
(await cookies()).set('cartId', cartId);
}

if (!cartItem) {
return 'Missing product variant ID';
}

try {
await addToCart(cartId, cartItem);
const result = await addToCart(cartId, cartItem);
if (result instanceof Error) {
return 'Error adding item to cart';
}
revalidateTag(TAGS.cart);
} catch (e) {
return 'Error adding item to cart';
}
}

export async function removeItem(prevState: any, productId: string) {
const cartId = cookies().get('cartId')?.value;
const cartId = (await cookies()).get('cartId')?.value;

if (!cartId) {
return 'Missing cart ID';
}

try {
await removeFromCart(cartId, productId);
const result = await removeFromCart(cartId, productId);
if (result instanceof Error) {
return 'Error removing item from cart';
}
revalidateTag(TAGS.cart);
} catch (e) {
return 'Error removing item from cart';
}
}

export async function updateItemQuantity(prevState: any, cartItem: CartProduct) {
const cartId = cookies().get('cartId')?.value;
const cartId = (await cookies()).get('cartId')?.value;

if (!cartId) {
return 'Missing cart ID';
}

try {
if (cartItem.quantity === 0) {
await removeFromCart(cartId, cartItem.product.id);
const result = await removeFromCart(cartId, cartItem.product.id);
if (result instanceof Error) {
return 'Error removing item from cart';
}
revalidateTag(TAGS.cart);
return;
}

await updateCart(cartItem);
const result = await updateCart(cartItem);
if (result instanceof Error) {
return 'Error updating item quantity';
}
revalidateTag(TAGS.cart);
} catch (e) {
return 'Error updating item quantity';
Expand Down
13 changes: 8 additions & 5 deletions applications/next-js/components/cart/index.tsx
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
import { getCart } from "lib/dynamo";
import { cookies } from "next/headers";
import CartModal from "./modal";
import { getCart } from 'lib/dynamo';
import { cookies } from 'next/headers';
import CartModal from './modal';

export default async function Cart() {
const cartId = cookies().get("cartId")?.value;
const cartId = (await cookies()).get('cartId')?.value;
let cart;

if (cartId) {
cart = await getCart(cartId);
const cartResult = await getCart(cartId);
if (!(cartResult instanceof Error)) {
cart = cartResult;
}
}

return <CartModal cart={cart} />;
Expand Down
Loading