diff --git a/.circleci/config.yml b/.circleci/config.yml
index 9f61213127..91e75376ca 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -596,50 +596,6 @@ jobs:
NOMAD_VERSION: main
steps: *NOMAD_INTEGRATION_TEST_STEPS
- build-website-docker-image:
- docker:
- - image: docker.mirror.hashicorp.services/circleci/buildpack-deps
- shell: /usr/bin/env bash -euo pipefail -c
- steps:
- - checkout
- - setup_remote_docker
- - run:
- name: Build Docker Image if Necessary
- command: |
- # Ignore job if running an enterprise build
- IMAGE_TAG=$(cat website/Dockerfile website/package-lock.json | sha256sum | awk '{print $1;}')
- echo "Using $IMAGE_TAG"
- if [ "$CIRCLE_REPOSITORY_URL" != "git@github.com:hashicorp/consul.git" ]; then
- echo "Not Consul OSS Repo, not building website docker image"
- elif curl https://hub.docker.com/v2/repositories/hashicorp/consul-website/tags/$IMAGE_TAG -fsL > /dev/null; then
- echo "Dependencies have not changed, not building a new website docker image."
- else
- cd website/
- docker build -t hashicorp/consul-website:$IMAGE_TAG .
- docker tag hashicorp/consul-website:$IMAGE_TAG hashicorp/consul-website:latest
- docker login -u $WEBSITE_DOCKER_USER -p $WEBSITE_DOCKER_PASS
- docker push hashicorp/consul-website
- fi
- - run: *notify-slack-failure
-
- algolia-index:
- docker:
- - image: docker.mirror.hashicorp.services/node:14
- steps:
- - checkout
- - run:
- name: Push content to Algolia Index
- command: |
- if [ "$CIRCLE_REPOSITORY_URL" != "git@github.com:hashicorp/consul.git" ]; then
- echo "Not Consul OSS Repo, not indexing Algolia"
- exit 0
- fi
- cd website/
- npm install -g npm@latest
- npm install
- node scripts/index_search_content.js
- - run: *notify-slack-failure
-
# build frontend yarn cache
frontend-cache:
docker:
@@ -1155,20 +1111,6 @@ workflows:
requires:
- dev-build
- website:
- unless: << pipeline.parameters.trigger-load-test >>
- jobs:
- - build-website-docker-image:
- context: website-docker-image
- filters:
- branches:
- only:
- - main
- - algolia-index:
- filters:
- branches:
- only:
- - stable-website
frontend:
unless: << pipeline.parameters.trigger-load-test >>
jobs:
diff --git a/website/components/basic-hero/img/right-arrow-icon.svg b/website/components/basic-hero/img/right-arrow-icon.svg
deleted file mode 100644
index 01a621cdce..0000000000
--- a/website/components/basic-hero/img/right-arrow-icon.svg
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/website/components/basic-hero/index.jsx b/website/components/basic-hero/index.jsx
deleted file mode 100644
index a33bcb0c8c..0000000000
--- a/website/components/basic-hero/index.jsx
+++ /dev/null
@@ -1,56 +0,0 @@
-import Button from '@hashicorp/react-button'
-
-export default function BasicHero({
- heading,
- content,
- links,
- brand,
- backgroundImage,
-}) {
- return (
-
-
-
{heading}
- {content &&
{content}
}
- {links && links.length > 0 && (
- <>
-
- {links.slice(0, 2).map((link, stableIdx) => {
- const buttonVariant = stableIdx === 0 ? 'primary' : 'secondary'
- return (
-
- )
- })}
-
- {links[2] && (
-
-
-
- )}
- >
- )}
-
-
- )
-}
diff --git a/website/components/basic-hero/style.css b/website/components/basic-hero/style.css
deleted file mode 100644
index 257d6680f4..0000000000
--- a/website/components/basic-hero/style.css
+++ /dev/null
@@ -1,76 +0,0 @@
-.g-basic-hero {
- padding: 88px 0;
-
- & .g-type-display-1 {
- color: var(--gray-1);
- text-align: center;
- margin-left: auto;
- margin-right: auto;
- margin-top: 0;
- max-width: 14em;
- }
-
- & .g-type-body-large {
- color: var(--gray-2);
- margin: 0 auto 0 auto;
- text-align: center;
- max-width: 40em;
- }
-
- & .links {
- display: flex;
- flex-wrap: wrap;
- justify-content: center;
-
- /*
- * Margins here compensate for extra 8px margin on buttons
- * which are needed to center and space properly regardless of whether
- * buttons are wrapping to multiple lines or not.
- */
- margin-top: calc(32px - 8px);
- margin-bottom: -8px;
- @media (--large) {
- margin-top: calc(40px - 8px);
- }
-
- & .g-btn {
- /*
- * This ensures 16px between buttons at all times, while maintaining proper centering
- * when buttons wrap to multiple lines.
- * There will be an extra 8px space on all sides of the button group.
- * The top and bottom are accounted for by the -8px adjustment on `.action` margins.
- * The left and right excess is left as is - it's needed for proper centering when wrapping.
- */
- margin: 8px;
- }
- }
-
- & .third-link {
- display: flex;
- justify-content: center;
- margin-top: 32px;
- & a {
- color: var(--gray-2);
- }
- & svg * {
- stroke: var(--gray-2) !important;
- }
- }
-
- &.has-background {
- background-repeat: no-repeat;
- background-color: var(--gray-6);
- background-image: url(/img/hero/pattern-desktop.svg);
- width: 100%;
- background-size: cover;
- background-position: center;
-
- @media (max-width: 800px) {
- background-image: url(/img/hero/pattern-mobile.svg);
- }
-
- & .g-btn {
- background: var(--gray-6);
- }
- }
-}
diff --git a/website/components/block-list/index.tsx b/website/components/block-list/index.tsx
deleted file mode 100644
index 07e10fffb6..0000000000
--- a/website/components/block-list/index.tsx
+++ /dev/null
@@ -1,29 +0,0 @@
-import s from './style.module.css'
-
-interface Block {
- title: string
- description: string
- image: string
-}
-
-interface BlockListProps {
- blocks: Block[]
-}
-
-export default function BlockList({ blocks }: BlockListProps) {
- return (
-
- {blocks.map(({ image, title, description }) => (
-
-
-
-
-
-
{title}
-
{description}
-
-
- ))}
-
- )
-}
diff --git a/website/components/block-list/style.module.css b/website/components/block-list/style.module.css
deleted file mode 100644
index d6f2938262..0000000000
--- a/website/components/block-list/style.module.css
+++ /dev/null
@@ -1,23 +0,0 @@
-.blocksContainer {
- display: grid;
- row-gap: 64px;
-
- & .block {
- display: flex;
-
- & .imageContainer {
- margin-right: 40px;
- }
- }
-}
-
-.title {
- composes: g-type-display-5 from global;
- margin: 0 0 16px 0;
-}
-
-.description {
- composes: g-type-body-small from global;
- margin: 0;
- color: var(--gray-2);
-}
diff --git a/website/components/callout-blade/CalloutBlade.module.css b/website/components/callout-blade/CalloutBlade.module.css
deleted file mode 100644
index cb2e50b609..0000000000
--- a/website/components/callout-blade/CalloutBlade.module.css
+++ /dev/null
@@ -1,131 +0,0 @@
-.calloutBlade {
- padding-top: 56px;
- padding-bottom: 56px;
-
- --shadow-level-3: 0 16px 28px rgba(37, 38, 45, 0.12);
-
- & .contentWrapper {
- & > h3 {
- margin-top: 0;
- margin-bottom: 48px;
- @media (max-width: 1000px) {
- margin-bottom: 28px;
- }
- }
- }
-}
-
-.contentWrapper {
- composes: g-grid-container from global;
-}
-
-.callouts {
- display: grid;
- list-style: none;
- margin: 0;
- padding: 0;
-
- &.twoUp {
- grid-template-columns: 1fr 1fr;
- grid-gap: 32px;
-
- & .linkWrap {
- padding: 64px 32px;
- display: flex;
- flex-direction: row;
- background: var(--gray-6);
- &:hover {
- background: var(--gray-5);
- box-shadow: var(--shadow-level-3);
- }
-
- & .icon {
- margin-right: 48px;
- }
- @media (max-width: 1200px) {
- padding: 48px 32px;
- flex-direction: column;
- & .icon {
- margin-right: 0;
- }
- }
- }
- @media (max-width: 900px) {
- grid-template-columns: 1fr;
- }
- }
-
- &.threeUp {
- grid-template-columns: 1fr 1fr 1fr;
- grid-gap: 32px;
-
- & .linkWrap {
- padding: 64px 32px;
- border: 1px solid var(--gray-5);
- border-radius: 2px;
- &:hover {
- background: var(--gray-6);
- box-shadow: var(--shadow-level-3);
- border-color: var(--gray-6);
- }
- }
-
- @media (max-width: 1220px) {
- grid-template-columns: 1fr;
- & .linkWrap {
- padding: 48px 32px;
- }
- }
- }
-
- & .linkWrap {
- color: inherit;
- height: 100%;
- transition: all 0.3s ease;
- display: flex;
- flex-direction: column;
-
- & .icon {
- margin-bottom: 16px;
- & svg {
- height: 50px;
- }
- }
-
- & .flexWrapper {
- display: flex;
- flex-direction: column;
- flex-grow: 1;
- justify-content: space-between;
-
- & .infoWrapper {
- display: flex;
- flex-direction: column;
-
- & > h5 {
- margin-top: 0;
- margin-bottom: 16px;
- }
-
- & > p {
- color: var(--gray-3);
- margin-top: 0;
- margin-bottom: 48px;
- }
- }
-
- & .linkWrapper {
- & .eyebrow {
- margin-bottom: 8px;
- }
- & :global(.g-btn) {
- text-align: left;
- }
- }
- }
- }
-}
-
-.eyebrow {
- composes: g-type-label from global;
-}
diff --git a/website/components/callout-blade/index.jsx b/website/components/callout-blade/index.jsx
deleted file mode 100644
index e86ad03b9e..0000000000
--- a/website/components/callout-blade/index.jsx
+++ /dev/null
@@ -1,50 +0,0 @@
-import classNames from 'classnames'
-import styles from './CalloutBlade.module.css'
-import Button from '@hashicorp/react-button'
-import InlineSvg from '@hashicorp/react-inline-svg'
-
-export default function CalloutBlade({ title, callouts }) {
- return (
-
- )
-}
diff --git a/website/components/card-list/index.tsx b/website/components/card-list/index.tsx
deleted file mode 100644
index 7c6a8a0687..0000000000
--- a/website/components/card-list/index.tsx
+++ /dev/null
@@ -1,44 +0,0 @@
-import s from './style.module.css'
-
-interface Card {
- heading: string
- description: string
- url: string
- eyebrow: string
-}
-
-interface CardListProps {
- title: string
- cards: Card[]
- className?: string
-}
-
-export default function CardList({ title, cards, className }: CardListProps) {
- return (
-
- )
-}
diff --git a/website/components/card-list/style.module.css b/website/components/card-list/style.module.css
deleted file mode 100644
index 37defd3633..0000000000
--- a/website/components/card-list/style.module.css
+++ /dev/null
@@ -1,61 +0,0 @@
-.cardsWrapper {
- display: grid;
- column-gap: 40px;
- row-gap: 40px;
- grid-template-columns: repeat(auto-fill, minmax(218px, 1fr));
-
- & .card {
- border: 1px solid var(--gray-5);
- box-shadow: 0 2px 3px rgba(37, 41, 55, 0.08);
- border-radius: 1px;
- transition: box-shadow 0.25s, transform 0.25s;
- display: flex;
- flex-direction: column;
- padding: 24px 24px 28px;
- justify-content: space-between;
-
- &:hover {
- box-shadow: 0 16px 28px rgba(37, 38, 45, 0.12);
- transform: translateY(-4px);
- }
-
- & .cardContent {
- display: flex;
- flex-direction: column;
- }
-
- & .icon {
- width: 12px;
- }
- }
-}
-
-.title {
- composes: g-type-display-3 from global;
- margin-top: 0;
- margin-bottom: 46px;
-}
-
-.eyebrow {
- display: flex;
- width: 100%;
- justify-content: space-between;
- align-items: center;
- composes: g-type-label from global;
- color: var(--gray-2);
- margin-bottom: 14px;
-}
-
-.heading {
- composes: g-type-display-6 from global;
- margin-top: 0;
- margin-bottom: 8px;
- color: var(--black);
-}
-
-.description {
- composes: g-type-body from global;
- color: var(--gray-1);
- margin-top: 0;
- margin-bottom: 17px;
-}
diff --git a/website/components/case-study-carousel/case-study-slide.jsx b/website/components/case-study-carousel/case-study-slide.jsx
deleted file mode 100644
index 315a8504d8..0000000000
--- a/website/components/case-study-carousel/case-study-slide.jsx
+++ /dev/null
@@ -1,44 +0,0 @@
-import InlineSvg from '@hashicorp/react-inline-svg'
-import Image from '@hashicorp/react-image'
-import Button from '@hashicorp/react-button'
-import QuoteMarksIcon from './img/quote.svg?include'
-
-export default function CaseStudySlide({
- caseStudy: { person, quote, company, caseStudyURL },
-}) {
- return (
-
-
- {quote}
-
-
-
-
-
- {person.firstName} {person.lastName}
-
-
- {person.title}, {company.name}
-
-
-
-
-
-
-
- )
-}
diff --git a/website/components/case-study-carousel/img/active-control-dot.svg b/website/components/case-study-carousel/img/active-control-dot.svg
deleted file mode 100644
index ee15572f4f..0000000000
--- a/website/components/case-study-carousel/img/active-control-dot.svg
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/website/components/case-study-carousel/img/inactive-control-dot.svg b/website/components/case-study-carousel/img/inactive-control-dot.svg
deleted file mode 100644
index c28dc96807..0000000000
--- a/website/components/case-study-carousel/img/inactive-control-dot.svg
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/website/components/case-study-carousel/img/left-arrow-control.svg b/website/components/case-study-carousel/img/left-arrow-control.svg
deleted file mode 100644
index 0cec5c4b62..0000000000
--- a/website/components/case-study-carousel/img/left-arrow-control.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/website/components/case-study-carousel/img/quote.svg b/website/components/case-study-carousel/img/quote.svg
deleted file mode 100644
index 4e597a2319..0000000000
--- a/website/components/case-study-carousel/img/quote.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
\ No newline at end of file
diff --git a/website/components/case-study-carousel/img/right-arrow-control.svg b/website/components/case-study-carousel/img/right-arrow-control.svg
deleted file mode 100644
index eb390dd7c8..0000000000
--- a/website/components/case-study-carousel/img/right-arrow-control.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/website/components/case-study-carousel/index.jsx b/website/components/case-study-carousel/index.jsx
deleted file mode 100644
index 0d2a9358ae..0000000000
--- a/website/components/case-study-carousel/index.jsx
+++ /dev/null
@@ -1,99 +0,0 @@
-import { useState } from 'react'
-import { isIE } from 'react-device-detect'
-
-import Carousel from 'nuka-carousel'
-import CaseSlide from './case-study-slide'
-import Image from '@hashicorp/react-image'
-import InlineSvg from '@hashicorp/react-inline-svg'
-import ActiveControlDot from './img/active-control-dot.svg?include'
-import InactiveControlDot from './img/inactive-control-dot.svg?include'
-import LeftArrow from './img/left-arrow-control.svg?include'
-import RightArrow from './img/right-arrow-control.svg?include'
-
-export default function CaseStudyCarousel({
- caseStudies,
- title,
- logoSection = { grayBackground: false, featuredLogos: [] },
-}) {
- const [slideIndex, setSlideIndex] = useState(0)
- const { grayBackground, featuredLogos } = logoSection
-
- const caseStudySlides = caseStudies.map((caseStudy) => (
-
- ))
- const logoRows = featuredLogos && Math.ceil(featuredLogos.length / 3)
-
- function renderControls() {
- return (
-
- {caseStudies.map((caseStudy, stableIdx) => {
- return (
-
- )
- })}
-
- )
- }
-
- function sideControls(icon, direction) {
- return (
-
- )
- }
-
- return (
-
- {title}
- {!isIE ? (
- renderControls()}
- renderCenterLeftControls={({ previousSlide }) => {
- return sideControls(LeftArrow, previousSlide)
- }}
- renderCenterRightControls={({ nextSlide }) => {
- return sideControls(RightArrow, nextSlide)
- }}
- afterSlide={(slideIndex) => setSlideIndex(slideIndex)}
- >
- {caseStudySlides}
-
- ) : null}
-
- {featuredLogos && featuredLogos.length > 0 && (
-
- {featuredLogos.map((featuredLogo) => (
-
- ))}
-
- )}
-
-
- )
-}
diff --git a/website/components/case-study-carousel/style.css b/website/components/case-study-carousel/style.css
deleted file mode 100644
index e7adad1307..0000000000
--- a/website/components/case-study-carousel/style.css
+++ /dev/null
@@ -1,283 +0,0 @@
-.g-case-carousel {
- display: flex;
- flex-direction: column;
- align-items: center;
- position: relative;
- padding-top: 0 !important;
- padding-bottom: 0 !important;
-
- & h2 {
- margin-bottom: 30px;
- max-width: 600px;
- text-align: center;
- white-space: pre-wrap;
-
- @media (max-width: 800px) {
- margin-top: 64px;
- white-space: initial;
- margin-left: 24px;
- margin-right: 24px;
- }
- }
-
- &::after {
- content: '';
- width: 100%;
- height: var(--background-height);
- position: absolute;
- bottom: 0;
- z-index: -1;
- }
-
- &.has-background {
- &::after {
- content: '';
- background: var(--gray-6);
- }
-
- & .background-section {
- background: var(--gray-6);
- padding-bottom: 64px;
- }
- }
-
- & .background-section {
- width: 100%;
-
- & .mono-logos {
- align-items: baseline;
- display: flex;
- justify-content: center;
- max-width: 750px;
- margin: 0 auto;
- margin-top: 70px;
- flex-wrap: wrap;
-
- & > img {
- height: 100%;
- max-height: 40px;
- width: 33.33%;
- padding: 0 30px;
- margin: 24px 0;
-
- @media (max-width: 800px) {
- padding: 0 20px;
- max-height: 28px;
- }
- }
-
- & > picture {
- max-height: 40px;
- width: 33.33%;
- padding: 0 30px;
- margin: 24px 0;
-
- @media (max-width: 800px) {
- padding: 0 20px;
- max-height: 28px;
- }
-
- & > img {
- width: 100%;
- height: auto;
- display: flex;
- }
- }
- }
- }
-
- & .slider-control-bottomcenter {
- bottom: -35px !important;
- }
-
- /* Begin `nuka-carousel` styles */
- & .slider {
- max-width: 1200px;
-
- &:focus {
- outline: none !important;
- }
-
- @media (max-width: 800px) {
- width: calc(100% - 48px) !important;
- }
-
- & .slider-list {
- margin-bottom: 50px !important;
-
- @media (max-width: 800px) {
- margin-bottom: 30px !important;
- }
- }
-
- & .slider-frame:focus {
- outline: none !important;
- }
-
- & .slider-slide:focus {
- outline: none !important;
- }
- }
-
- /* End `nuka-carousel` styles */
-
- & .side-control {
- border: none;
- background: none;
- margin: 20px;
-
- &:focus {
- outline: none;
- }
-
- &:hover:not([disabled]) {
- cursor: pointer;
- }
-
- @media (max-width: 991px) {
- display: none;
- }
-
- & svg path {
- stroke: var(--gray-2);
- }
-
- &:disabled svg path {
- stroke: var(--gray-4);
- }
- }
-
- & .case-slide {
- display: flex;
- flex-wrap: wrap;
- width: 100%;
- background: var(--white);
- padding: 64px;
- box-shadow: 0 8px 22px #dedede;
-
- @media (max-width: 800px) {
- box-shadow: none;
- border: 1px solid var(--gray-5);
- padding: 48px;
- }
-
- @media (--medium-up) {
- max-width: 750px;
- }
-
- & button {
- margin-top: 24px;
- }
-
- & .quotes {
- display: flex;
- margin-bottom: 24px;
- }
-
- & h4 {
- margin: 0;
-
- &.case {
- min-height: 130px;
- margin-bottom: 24px;
- color: var(--gray-2);
-
- @media (max-width: 800px) {
- min-height: 155px;
- font-size: 22px;
- }
-
- @media (max-width: 650px) {
- min-height: 190px;
- }
-
- @media (max-width: 550px) {
- font-size: 20px;
- }
-
- @media (max-width: 400px) {
- font-size: 18px;
- line-height: 28px;
- }
- }
- }
-
- & p {
- margin: 0;
- }
-
- & a {
- margin-top: 24px;
- }
-
- & .case-content {
- display: flex;
- justify-content: space-between;
- width: 100%;
- align-items: center;
- }
-
- & .person-container {
- display: flex;
- align-items: center;
-
- & picture {
- display: flex;
- }
-
- & .person-photo {
- border-radius: 50%;
- max-height: 72px;
- margin-right: 24px;
- }
-
- & .person-name {
- padding-right: 16px;
-
- & h5 {
- margin: 0;
-
- @media (max-width: 400px) {
- font-size: 16px;
- }
- }
-
- @media (max-width: 400px) {
- & p {
- font-size: 15px;
- }
- }
- }
- }
-
- & .company-logo {
- max-height: 40px;
- max-width: 180px;
-
- @media (max-width: 800px) {
- display: none;
- }
- }
-
- & .case {
- color: var(--gray-4);
- font-size: 24px;
- line-height: 31px; /* Called for within the design, no custom property seemed appropriate */
- }
- }
-
- & .carousel-controls {
- width: 100%;
- display: flex;
- flex-wrap: nowrap;
- justify-content: center;
-
- & .carousel-controls-button {
- height: 20px;
- background: transparent;
- box-shadow: none;
- cursor: pointer;
- border: none;
- }
- }
-}
diff --git a/website/components/cloud-offerings-list/index.jsx b/website/components/cloud-offerings-list/index.jsx
deleted file mode 100644
index 7a32e1e9ff..0000000000
--- a/website/components/cloud-offerings-list/index.jsx
+++ /dev/null
@@ -1,28 +0,0 @@
-import Button from '@hashicorp/react-button'
-
-export default function CloudOfferingsList({ offerings }) {
- return (
-
- )
-}
diff --git a/website/components/cloud-offerings-list/style.css b/website/components/cloud-offerings-list/style.css
deleted file mode 100644
index a1b0317cd7..0000000000
--- a/website/components/cloud-offerings-list/style.css
+++ /dev/null
@@ -1,57 +0,0 @@
-ul.g-cloud-offerings-list {
- list-style: none;
- padding: 0;
- margin: -16px;
- display: flex;
-
- @media (width < 769px) {
- flex-direction: column;
- }
-
- & li {
- flex-grow: 1;
- margin: 16px;
- background: var(--white);
- border: 1px solid var(--gray-5);
- border-radius: 2px;
- text-align: center;
- transition: box-shadow 0.25s, transform 0.25s, -webkit-transform 0.25s;
-
- &:hover {
- box-shadow: 0 16px 28px rgba(37, 38, 45, 0.12);
- transform: translateY(-4px);
- cursor: pointer;
- }
-
- & > a {
- display: block;
- padding: 32px;
- color: inherit;
-
- & > img {
- display: block;
- width: 400px;
- max-width: 100%;
- margin-left: auto;
- margin-right: auto;
- margin-bottom: 14px;
- }
-
- & > span {
- color: var(--gray-3);
- }
-
- & > h4 {
- text-decoration: none;
- margin-top: 8px;
- margin-bottom: 0;
- }
-
- & > p {
- font-size: 19px;
- margin-top: 8px;
- margin-bottom: 24px;
- }
- }
- }
-}
diff --git a/website/components/config-entry-reference/index.jsx b/website/components/config-entry-reference/index.jsx
deleted file mode 100644
index 329092371a..0000000000
--- a/website/components/config-entry-reference/index.jsx
+++ /dev/null
@@ -1,200 +0,0 @@
-import Tabs, { Tab } from '@hashicorp/react-tabs'
-import EnterpriseAlertBase from '@hashicorp/react-enterprise-alert'
-
-/**
- * ConfigEntryReference renders the reference docs for a config entry.
- * It creates two tabs, one for HCL docs and one for Kubernetes docs.
- *
- * @param {array