CI updates #1

This commit is contained in:
Darren Clarke 2023-06-20 07:49:52 +00:00 committed by GitHub
parent 59ae833099
commit 5a343c7eb9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
27 changed files with 707 additions and 652 deletions

View file

@ -1,9 +1,3 @@
leafcutter-build:
stage: build
script:
- npm install
- cd apps/leafcutter && npm run-script build
leafcutter-docker-build:
image: registry.gitlab.com/guardianproject-ops/docker-alpine-git:latest
services:
@ -31,19 +25,3 @@ leafcutter-docker-release:
script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- cd apps/leafcutter && make docker/add-tag
leafcutter-helm-release:
image: debian:bullseye-slim
stage: helm-release
only:
- main
- develop
script:
- apt-get update
- apt-get install curl gnupg make jq -y
- curl https://baltocdn.com/helm/signing.asc | apt-key add -
- apt-get install apt-transport-https -y
- echo "deb https://baltocdn.com/helm/stable/debian/ all main" | tee /etc/apt/sources.list.d/helm-stable-debian.list
- apt-get update
- apt-get install helm
- cd apps/leafcutter && make helm/build-push

View file

@ -9,13 +9,16 @@ import { GettingStartedDialog } from "./GettingStartedDialog";
import { useAppContext } from "./AppProvider";
// import { Footer } from "./Footer";
export const Layout: FC<PropsWithChildren> = ({ children }: any) => {
type LayoutProps = PropsWithChildren<{
embedded?: boolean;
}>;
export const Layout: FC<LayoutProps> = ({
embedded = false,
children,
}: any) => {
const [cookies, setCookie] = useCookies(["cookieConsent"]);
const consentGranted = cookies.cookieConsent === "true";
const {
publicRuntimeConfig: { embedded },
} = getConfig();
const {
colors: {
white,

View file

@ -0,0 +1,4 @@
import { GetServerSidePropsContext } from "next";
export const getEmbedded = (context: GetServerSidePropsContext) =>
context.req.headers["x-leafcutter-embedded"] === "true";

View file

@ -23,13 +23,13 @@
"@mui/icons-material": "^5",
"@mui/lab": "^5.0.0-alpha.134",
"@mui/material": "^5",
"@mui/x-data-grid-pro": "^6.7.0",
"@mui/x-date-pickers-pro": "^6.7.0",
"@mui/x-data-grid-pro": "^6.8.0",
"@mui/x-date-pickers-pro": "^6.8.0",
"@opensearch-project/opensearch": "^2.0.0",
"date-fns": "^2.30.0",
"http-proxy-middleware": "^2.0.6",
"material-ui-popup-state": "^5.0.9",
"next": "13.4.5",
"next": "13.4.6",
"next-auth": "^4.22.1",
"next-http-proxy-middleware": "^1.2.5",
"nodemailer": "^6.9.3",
@ -46,12 +46,12 @@
},
"devDependencies": {
"@babel/core": "^7.22.5",
"@types/react": "18.2.12",
"@types/react": "18.2.13",
"@types/uuid": "^9.0.2",
"babel-loader": "^9.1.2",
"eslint": "^8.42.0",
"eslint": "^8.43.0",
"eslint-config-airbnb": "^19.0.4",
"eslint-config-next": "^13.4.5",
"eslint-config-next": "^13.4.6",
"eslint-config-prettier": "^8.8.0",
"eslint-plugin-import": "^2.27.5",
"eslint-plugin-jsx-a11y": "^6.7.1",

View file

@ -1,4 +1,4 @@
import { GetServerSideProps, GetServerSidePropsContext } from "next";
import { NextPage, GetServerSideProps, GetServerSidePropsContext } from "next";
import { useTranslate } from "react-polyglot";
import Head from "next/head";
import Image from "next/legacy/image";
@ -15,15 +15,21 @@ import Globe from "images/globe.png";
import Controls from "images/controls.png";
import CommunityBackground from "images/community-background.png";
import Bicycle from "images/bicycle.png";
import { getEmbedded } from "lib/utils";
const About = () => {
type AboutProps = {
embedded: boolean;
};
const About: NextPage<AboutProps> = ({ embedded }) => {
const t = useTranslate();
const {
colors: { white, leafcutterElectricBlue, cdrLinkOrange },
typography: { h1, h4, p },
} = useAppContext();
return (
<Layout>
<Layout embedded={embedded}>
<Head>
<title>Digital Threat Dashboard Leafcutter</title>
</Head>
@ -165,3 +171,7 @@ const About = () => {
};
export default About;
export const getServerSideProps: GetServerSideProps = async (
context: GetServerSidePropsContext
) => ({ props: { embedded: getEmbedded(context) } });

View file

@ -10,12 +10,14 @@ import { Layout } from "components/Layout";
import { useAppContext } from "components/AppProvider";
import { PageHeader } from "components/PageHeader";
import { VisualizationBuilder } from "components/VisualizationBuilder";
import { getEmbedded } from "lib/utils";
type CreateProps = {
templates: any;
embedded: boolean;
};
const Create: FC<CreateProps> = ({ templates }) => {
const Create: FC<CreateProps> = ({ templates, embedded }) => {
const t = useTranslate();
const {
colors: { cdrLinkOrange },
@ -34,7 +36,7 @@ const Create: FC<CreateProps> = ({ templates }) => {
}, [searchIntroComplete, router, setCookie]);
return (
<Layout>
<Layout embedded={embedded}>
<Head>
<title>Digital Threat Dashboard Leafcutter</title>
</Head>
@ -76,5 +78,5 @@ export const getServerSideProps: GetServerSideProps = async (
) => {
const templates = await getTemplates(100);
return { props: { templates } };
return { props: { templates, embedded: getEmbedded(context) } };
};

View file

@ -1,13 +1,19 @@
import Head from "next/head";
import { useTranslate } from "react-polyglot";
import { NextPage, GetServerSideProps, GetServerSidePropsContext } from "next";
import { Box, Grid } from "@mui/material";
import { Layout } from "components/Layout";
import { PageHeader } from "components/PageHeader";
import { Question } from "components/Question";
import { useAppContext } from "components/AppProvider";
import FaqHeader from "images/faq-header.svg";
import { getEmbedded } from "lib/utils";
const FAQ = () => {
type FAQProps = {
embedded: boolean;
};
const FAQ: NextPage<FAQProps> = ({ embedded }) => {
const t = useTranslate();
const {
colors: { lavender },
@ -64,7 +70,7 @@ const FAQ = () => {
];
return (
<Layout>
<Layout embedded={embedded}>
<Head>
<title>Digital Threat Dashboard Leafcutter</title>
</Head>
@ -104,3 +110,7 @@ const FAQ = () => {
};
export default FAQ;
export const getServerSideProps: GetServerSideProps = async (
context: GetServerSidePropsContext
) => ({ props: { embedded: getEmbedded(context) } });

View file

@ -14,13 +14,16 @@ import { Welcome } from "components/Welcome";
import { WelcomeDialog } from "components/WelcomeDialog";
import { VisualizationCard } from "components/VisualizationCard";
import { useAppContext } from "components/AppProvider";
import { getEmbedded } from "lib/utils";
type MyVisualizationsProps = {
visualizations: any;
embedded: boolean;
};
const MyVisualizations: NextPage<MyVisualizationsProps> = ({
visualizations,
embedded,
}) => {
const router = useRouter();
const cookieName = "homeIntroComplete";
@ -40,7 +43,7 @@ const MyVisualizations: NextPage<MyVisualizationsProps> = ({
}, [homeIntroComplete, router, setCookie]);
return (
<Layout>
<Layout embedded={embedded}>
<Head>
<title>Digital Threat Dashboard Leafcutter</title>
</Head>
@ -116,5 +119,5 @@ export const getServerSideProps: GetServerSideProps = async (
session?.user?.email ?? "none",
20
);
return { props: { visualizations } };
return { props: { visualizations, embedded: getEmbedded(context) } };
};

View file

@ -1,6 +1,5 @@
import { FC } from "react";
/* eslint-disable no-underscore-dangle */
import { GetServerSideProps, GetServerSidePropsContext } from "next";
// import { Client } from "@opensearch-project/opensearch";
import { RawDataViewer } from "components/RawDataViewer";
import { VisualizationDetail } from "components/VisualizationDetail";
@ -24,6 +23,7 @@ const Preview: FC<PreviewProps> = ({
);
export default Preview;
/*
export const getServerSideProps: GetServerSideProps = async (
context: GetServerSidePropsContext

View file

@ -7,12 +7,14 @@ import { getTrends } from "lib/opensearch";
import { PageHeader } from "components/PageHeader";
import { VisualizationCard } from "components/VisualizationCard";
import { useAppContext } from "components/AppProvider";
import { getEmbedded } from "lib/utils";
type TrendsProps = {
visualizations: any;
embedded: boolean;
};
const Trends: NextPage<TrendsProps> = ({ visualizations }) => {
const Trends: NextPage<TrendsProps> = ({ visualizations, embedded }) => {
const t = useTranslate();
const {
colors: { cdrLinkOrange },
@ -20,7 +22,7 @@ const Trends: NextPage<TrendsProps> = ({ visualizations }) => {
} = useAppContext();
return (
<Layout>
<Layout embedded={embedded}>
<Head>
<title>Digital Threat Dashboard Leafcutter</title>
</Head>
@ -82,5 +84,5 @@ export const getServerSideProps: GetServerSideProps = async (
) => {
const visualizations = await getTrends(25);
return { props: { visualizations } };
return { props: { visualizations, embedded: getEmbedded(context) } };
};

View file

@ -4,13 +4,18 @@ import { Client } from "@opensearch-project/opensearch";
import Head from "next/head";
import { Layout } from "components/Layout";
import { VisualizationDetail } from "components/VisualizationDetail";
import { getEmbedded } from "lib/utils";
type VisualizationProps = {
visualization: any;
embedded: boolean;
};
const Visualization: NextPage<VisualizationProps> = ({ visualization }) => (
<Layout>
const Visualization: NextPage<VisualizationProps> = ({
visualization,
embedded,
}) => (
<Layout embedded={embedded}>
<Head>
<title>Digital Threat Dashboard Leafcutter</title>
</Head>
@ -53,5 +58,5 @@ export const getServerSideProps: GetServerSideProps = async (
}?embed=true`,
};
return { props: { visualization } };
return { props: { visualization, embedded: getEmbedded(context) } };
};

View file

@ -1,9 +1,3 @@
link-build:
stage: build
script:
- npm install
- cd apps/link && npm run-script build
link-docker-build:
image: registry.gitlab.com/guardianproject-ops/docker-alpine-git:latest
services:

View file

@ -21,12 +21,12 @@
"@mui/icons-material": "^5",
"@mui/lab": "^5.0.0-alpha.134",
"@mui/material": "^5",
"@mui/x-data-grid-pro": "^6.7.0",
"@mui/x-date-pickers-pro": "^6.7.0",
"@mui/x-data-grid-pro": "^6.8.0",
"@mui/x-date-pickers-pro": "^6.8.0",
"date-fns": "^2.30.0",
"graphql-request": "^6.1.0",
"material-ui-popup-state": "^5.0.9",
"next": "13.4.5",
"next": "13.4.6",
"next-auth": "^4.22.1",
"react": "18.2.0",
"react-dom": "18.2.0",
@ -37,12 +37,12 @@
},
"devDependencies": {
"@babel/core": "^7.22.5",
"@types/react": "18.2.12",
"@types/react": "18.2.13",
"@types/uuid": "^9.0.2",
"babel-loader": "^9.1.2",
"eslint": "^8.42.0",
"eslint": "^8.43.0",
"eslint-config-airbnb": "^19.0.4",
"eslint-config-next": "^13.4.5",
"eslint-config-next": "^13.4.6",
"eslint-config-prettier": "^8.8.0",
"eslint-plugin-import": "^2.27.5",
"eslint-plugin-jsx-a11y": "^6.7.1",

View file

@ -29,7 +29,7 @@
"graphile-worker": "^0.13.0",
"hapi-auth-bearer-token": "^8.0.0",
"hapi-auth-jwt2": "^10.4.0",
"hapi-swagger": "^16.0.1",
"hapi-swagger": "^17.0.0",
"joi": "^17.9.2",
"jsonwebtoken": "^9.0.0",
"jwks-rsa": "^3.0.1",
@ -41,7 +41,7 @@
"postgraphile": "4.13.0",
"postgraphile-plugin-connection-filter": "^2.3.0",
"remeda": "^1.19.0",
"twilio": "^4.11.2",
"twilio": "^4.12.0",
"typeorm": "^0.3.16"
},
"devDependencies": {

View file

@ -0,0 +1,27 @@
metamigo-docker-build:
image: registry.gitlab.com/guardianproject-ops/docker-alpine-git:latest
services:
- docker:dind
stage: docker-build
variables:
DOCKER_NS: ${CI_REGISTRY}/digiresilience/link/link-stack/metamigo
DOCKER_TAG: ${CI_COMMIT_SHORT_SHA}
script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- cd apps/metamigo-cli && make docker/build-fresh-push
metamigo-docker-release:
image: registry.gitlab.com/guardianproject-ops/docker-alpine-git:latest
services:
- docker:dind
stage: docker-release
variables:
DOCKER_NS: ${CI_REGISTRY}/digiresilience/link/link-stack/metamigo
DOCKER_TAG: ${CI_COMMIT_SHORT_SHA}
DOCKER_TAG_NEW: ${CI_COMMIT_REF_NAME}
only:
- main
- develop
script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- cd apps/metamigo-cli && make docker/add-tag

View file

@ -0,0 +1,40 @@
PACKAGE_NAME ?= $(shell jq -r '.name' package.json)
PACKAGE_VERSION?= $(shell jq -r '.version' package.json)
BUILD_DATE ?=$(shell date -u +"%Y-%m-%dT%H:%M:%SZ")
DOCKER_ARGS ?=
DOCKER_NS ?= registry.gitlab.com/digiresilience/link/link-stack/metamigo
DOCKER_TAG ?= test
DOCKER_BUILD := docker build ${DOCKER_ARGS} --build-arg BUILD_DATE=${BUILD_DATE}
DOCKER_BUILD_FRESH := ${DOCKER_BUILD} --pull --no-cache
DOCKER_BUILD_ARGS := --build-arg VCS_REF=${CI_COMMIT_SHORT_SHA}
DOCKER_PUSH := docker push
DOCKER_BUILD_TAG := ${DOCKER_NS}:${DOCKER_TAG}
.PHONY: .npmrc
.EXPORT_ALL_VARIABLES:
.npmrc:
ifdef CI_JOB_TOKEN
echo '@guardianproject-ops:registry=https://gitlab.com/api/v4/packages/npm/' > .npmrc
echo '@digiresilience:registry=https://gitlab.com/api/v4/packages/npm/' >> .npmrc
echo '//gitlab.com/api/v4/packages/npm/:_authToken=${CI_JOB_TOKEN}' >> .npmrc
echo '//gitlab.com/api/v4/projects/:_authToken=${CI_JOB_TOKEN}' >> .npmrc
echo '//gitlab.com/api/v4/projects/${CI_PROJECT_ID}/packages/npm/:_authToken=${CI_JOB_TOKEN}' >> .npmrc
endif
docker/build: .npmrc
DOCKER_BUILDKIT=1 ${DOCKER_BUILD} ${DOCKER_BUILD_ARGS} -t ${DOCKER_BUILD_TAG} ${PWD}
docker/build-fresh: .npmrc
DOCKER_BUILDKIT=1 ${DOCKER_BUILD_FRESH} ${DOCKER_BUILD_ARGS} -t ${DOCKER_BUILD_TAG} ${PWD}
docker/add-tag:
docker pull ${DOCKER_NS}:${DOCKER_TAG}
docker tag ${DOCKER_NS}:${DOCKER_TAG} ${DOCKER_NS}:${DOCKER_TAG_NEW}
docker push ${DOCKER_NS}:${DOCKER_TAG_NEW}
docker/push:
${DOCKER_PUSH} ${DOCKER_BUILD_TAG}
docker/build-push: docker/build docker/push
docker/build-fresh-push: docker/build-fresh docker/push

View file

@ -15,7 +15,7 @@
"@digiresilience/metamigo-db": "*",
"@digiresilience/metamigo-api": "*",
"@digiresilience/metamigo-worker": "*",
"commander": "^10.0.1",
"commander": "^11.0.0",
"graphile-migrate": "^1.4.1",
"graphile-worker": "^0.13.0",
"node-jose": "^2.2.0",

View file

@ -1,5 +1,5 @@
#!/bin/bash
set -e
echo "starting leafcutter"
echo "starting metamigo-frontend"
exec dumb-init npm run start

View file

@ -14,15 +14,15 @@
"http-proxy-middleware": "^2.0.6",
"jsonwebtoken": "^9.0.0",
"jwks-rsa": "^3.0.1",
"next": "13.4.5",
"next": "13.4.6",
"next-auth": "4.22.1",
"ra-data-graphql": "^4.11.0",
"ra-i18n-polyglot": "^4.11.2",
"ra-input-rich-text": "^4.11.2",
"ra-language-english": "^4.11.2",
"ra-data-graphql": "^4.11.3",
"ra-i18n-polyglot": "^4.11.3",
"ra-input-rich-text": "^4.11.3",
"ra-language-english": "^4.11.3",
"ra-postgraphile": "^6.1.1",
"react": "18.2.0",
"react-admin": "^4.11.2",
"react-admin": "^4.11.3",
"react-digit-input": "^2.1.0",
"react-dom": "18.2.0",
"react-qr-code": "^2.0.11",
@ -41,9 +41,9 @@
"fmt": "prettier --ignore-path .eslintignore \"**/*.{js,jsx,ts,tsx,graphql,md}\" --write"
},
"devDependencies": {
"@next/eslint-plugin-next": "^13.4.5",
"@next/eslint-plugin-next": "^13.4.6",
"@types/hapi__wreck": "17.0.1",
"@types/react": "18.2.12",
"@types/react": "18.2.13",
"@types/react-mic": "12.4.3",
"babel-preset-link": "*",
"eslint-config-link": "*",

View file

@ -10,7 +10,7 @@
"remeda": "^1.19.0",
"html-to-text": "^9.0.5",
"node-fetch": "^3",
"twilio": "^4.11.2",
"twilio": "^4.12.0",
"@digiresilience/montar": "*",
"@digiresilience/metamigo-common": "*",
"@digiresilience/metamigo-config": "*",
@ -22,7 +22,7 @@
"@babel/preset-typescript": "7.22.5",
"@types/fluent-ffmpeg": "^2.1.21",
"@types/jest": "^29.5.2",
"eslint": "^8.42.0",
"eslint": "^8.43.0",
"jest": "^29.5.0",
"jest-circus": "^29.5.0",
"jest-junit": "^16.0.0",