diff --git a/src/components/Header/Header.astro b/src/components/Header/Header.astro index 5bac1ff40e..fc8239c2d5 100644 --- a/src/components/Header/Header.astro +++ b/src/components/Header/Header.astro @@ -243,7 +243,7 @@ const primaryLink = isEnterpriseSection margin: 0; } - @media (max-width: 87em) { + @media (max-width: 68em) { .nav-buttons { display: none !important; } diff --git a/src/components/PageContent/PageContent.astro b/src/components/PageContent/PageContent.astro index 919c6faf9e..271bfd3de1 100644 --- a/src/components/PageContent/PageContent.astro +++ b/src/components/PageContent/PageContent.astro @@ -1,5 +1,5 @@ --- -import { CollectionEntry } from 'astro:content'; +import type { CollectionEntry } from 'astro:content'; export interface Props { content: CollectionEntry<'docs'>['data']; } @@ -18,7 +18,13 @@ const suppressTitle = content.suppressTitle;
- {!suppressTitle &&

} + {!suppressTitle && ( +

+ )} {!suppressTitle && (

)} diff --git a/src/components/RightSidebar/RightSidebar.astro b/src/components/RightSidebar/RightSidebar.astro index a366e17bf1..4d9a21c0ca 100644 --- a/src/components/RightSidebar/RightSidebar.astro +++ b/src/components/RightSidebar/RightSidebar.astro @@ -1,30 +1,54 @@ --- import generateToc from '../../util/generateToc'; +import PageFeedback from '../PageFeedback.astro'; import TableOfContents from './TableOfContents'; const { headings } = Astro.props; --- - + ) +} + +
+ +
diff --git a/src/content.config.ts b/src/content.config.ts index 1c9f465fb9..1acdab41eb 100644 --- a/src/content.config.ts +++ b/src/content.config.ts @@ -13,6 +13,7 @@ const docs = defineCollection({ title: z.string(), description: z.string(), suppressTitle: z.boolean().optional(), + hubAccent: z.boolean().optional(), }), }); diff --git a/src/content/docs/ci-insights.mdx b/src/content/docs/ci-insights.mdx index 084d3a8ba7..ffc90663d2 100644 --- a/src/content/docs/ci-insights.mdx +++ b/src/content/docs/ci-insights.mdx @@ -1,6 +1,7 @@ --- title: CI Insights description: Optimize your CI run time, catch flaky tests, and give developers actionable insights so your team ships code faster. +hubAccent: true --- import Docset from '../../components/DocsetGrid/Docset.astro'; diff --git a/src/content/docs/enterprise/advanced-features.mdx b/src/content/docs/enterprise/advanced-features.mdx index 6e248d2740..e6defeabfb 100644 --- a/src/content/docs/enterprise/advanced-features.mdx +++ b/src/content/docs/enterprise/advanced-features.mdx @@ -48,9 +48,9 @@ MERGIFYENGINE_LOG_DATADOG=udp://:10518 CI test traces can be exported to Mergify CI Insights and Test Insights by backing these features with object storage. Set `MERGIFYENGINE_CI_TRACES_BACKEND` and bucket credentials according to your -provider. Both providers support two authentication modes: a static credential set you manage -yourself, or automatic discovery through your cloud workload identity (recommended when running -on GKE, EKS, GCE, or EC2 to avoid manual key rotation). +provider. Both providers support two authentication modes: automatic discovery through your cloud +workload identity (recommended when running on GKE, EKS, GCE, or EC2 to avoid manual key rotation), +or a static credential set you manage yourself. ### Google Cloud Storage @@ -69,21 +69,7 @@ MERGIFYENGINE_CI_TRACES_INCOMING_BUCKET="-mergify-ci-traces-incoming" MERGIFYENGINE_CI_TRACES_DONE_BUCKET="-mergify-ci-traces-done" ``` -#### Option A: Service Account JSON key - -Generate a JSON key for the Service Account and base64-encode it: - -```sh -base64 < credentials.json | tr -d '\n' -``` - -Add the encoded key to the engine: - -```ini -MERGIFYENGINE_GCS_CREDENTIALS="base64-encoded-credentials-json" -``` - -#### Option B: Application Default Credentials +#### Option A: Application Default Credentials (recommended) Set `MERGIFYENGINE_GCS_CREDENTIALS="auto"` to let Mergify resolve credentials from the Google [Application Default Credentials](https://cloud.google.com/docs/authentication/application-default-credentials) @@ -100,6 +86,20 @@ Bind the Kubernetes Service Account that runs the engine to the Google Service A bucket access. Google issues and rotates the credentials automatically, so no further configuration is needed. +#### Option B: Service Account JSON key + +Generate a JSON key for the Service Account and base64-encode it: + +```sh +base64 < credentials.json | tr -d '\n' +``` + +Add the encoded key to the engine: + +```ini +MERGIFYENGINE_GCS_CREDENTIALS="base64-encoded-credentials-json" +``` + ### Amazon S3 Requirements: @@ -109,44 +109,26 @@ Requirements: - An IAM identity with read/write/delete rights on those buckets -Common settings. Mergify reads the standard AWS environment variables, so no `MERGIFYENGINE_` -prefix is required: +Mergify reads the standard AWS environment variables, so no `MERGIFYENGINE_` prefix is required +for the common settings below: ```ini MERGIFYENGINE_CI_TRACES_BACKEND="s3" MERGIFYENGINE_CI_TRACES_INCOMING_BUCKET="-mergify-ci-traces-incoming" MERGIFYENGINE_CI_TRACES_DONE_BUCKET="-mergify-ci-traces-done" -AWS_ACCOUNT_ID=123456789012 -# Optional -AWS_REGION=us-west-2 # Custom S3 implementation endpoint AWS_ENDPOINT_URL_S3=https://my-s3-domain.example.com:1234/ ``` -:::note - The `MERGIFYENGINE_AWS_*` variants (`MERGIFYENGINE_AWS_ACCOUNT_ID`, - `MERGIFYENGINE_AWS_ACCESS_KEY_ID`, `MERGIFYENGINE_AWS_SECRET_ACCESS_KEY`, - `MERGIFYENGINE_AWS_REGION_NAME`, `MERGIFYENGINE_AWS_ENDPOINT_URL_S3`) are still accepted for - backwards compatibility but are deprecated. Prefer the unprefixed `AWS_*` names. They are the - same variables the AWS CLI and SDKs use. -::: - -#### Option A: IAM user access key - -Create an IAM user, attach a policy granting access to the two buckets, generate an access key, -and provide it to the engine: - -```ini -AWS_ACCESS_KEY_ID= -AWS_SECRET_ACCESS_KEY= -``` +#### Option A: IAM role discovery (recommended) -#### Option B: IAM role discovery +Mergify uses the standard +[boto3 credential chain](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/credentials.html) +to resolve credentials. Attach an IAM role granting access to the two buckets to the workload +running the engine, and there is nothing else to configure. AWS issues and rotates short-lived +credentials automatically, so no key rotation is required. -Leave both `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY` unset. Mergify falls back to the -standard -[boto3 credential chain](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/credentials.html), -which can resolve credentials from any of: +The credential chain can resolve credentials from any of: - IAM Roles for Service Accounts ([IRSA](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html)) or [EKS Pod Identity](https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html) @@ -158,8 +140,25 @@ which can resolve credentials from any of: - A profile or shared credentials file mounted into the container -Attach an IAM role granting access to the two buckets to the workload running the engine. AWS -issues and rotates short-lived credentials automatically, so no key rotation is required. +#### Option B: IAM user access key + +Create an IAM user, attach a policy granting access to the two buckets, generate an access key, +and provide it to the engine: + +```ini +AWS_ACCESS_KEY_ID= +AWS_SECRET_ACCESS_KEY= +# Optional +AWS_REGION=us-west-2 +``` + +:::note + The `MERGIFYENGINE_AWS_*` variants (`MERGIFYENGINE_AWS_ACCESS_KEY_ID`, + `MERGIFYENGINE_AWS_SECRET_ACCESS_KEY`, `MERGIFYENGINE_AWS_REGION_NAME`, + `MERGIFYENGINE_AWS_ENDPOINT_URL_S3`, `MERGIFYENGINE_AWS_ACCOUNT_ID`) are still accepted for + backwards compatibility but are deprecated. Prefer the unprefixed `AWS_*` names. The standard + names match what the AWS CLI and SDKs use; `AWS_ACCOUNT_ID` is no longer required for S3 access. +::: ## Slack Integration diff --git a/src/content/docs/index.mdx b/src/content/docs/index.mdx index 544453ac3b..24ac4453f4 100644 --- a/src/content/docs/index.mdx +++ b/src/content/docs/index.mdx @@ -62,7 +62,7 @@ import mergeQueueHero from './images/merge-queue-hero.jpg'; {/* -------------- PROBLEM CARDS -------------- */}
-

What problem are you solving?

+

What problem are you solving?

Broken main, slow merges
@@ -91,7 +91,7 @@ import mergeQueueHero from './images/merge-queue-hero.jpg'; {/* -------------- PRODUCTS -------------- */}
-

Products

+

Products

@@ -141,7 +141,7 @@ import mergeQueueHero from './images/merge-queue-hero.jpg'; {/* -------------- COMMUNITY -------------- */}
-

Community

+

Community

Share feedback, ask questions, and see what other teams build with Mergify.

diff --git a/src/content/docs/merge-queue.mdx b/src/content/docs/merge-queue.mdx index a051999f6f..773fa5f6e2 100644 --- a/src/content/docs/merge-queue.mdx +++ b/src/content/docs/merge-queue.mdx @@ -1,6 +1,7 @@ --- title: Merge Queue description: Ship faster with zero broken builds. Parallel testing, smart batching, and CI cost optimization. +hubAccent: true --- import Button from '~/components/Button.astro'; diff --git a/src/content/docs/test-insights.mdx b/src/content/docs/test-insights.mdx index 3d8ec3070f..f42e394f29 100644 --- a/src/content/docs/test-insights.mdx +++ b/src/content/docs/test-insights.mdx @@ -1,6 +1,7 @@ --- title: Test Insights description: Monitor, detect, and manage unreliable tests across your repositories. +hubAccent: true --- Test Insights helps you manage test reliability across the full lifecycle. diff --git a/src/layouts/BaseLayout.astro b/src/layouts/BaseLayout.astro index 87b3e23090..5b1ba74262 100644 --- a/src/layouts/BaseLayout.astro +++ b/src/layouts/BaseLayout.astro @@ -115,6 +115,7 @@ const canonicalURL = new URL(Astro.url.pathname.replace(/([^/])$/, '$1/'), Astro } #right-sidebar { display: flex; + flex-direction: column; } } diff --git a/src/layouts/MainLayout.astro b/src/layouts/MainLayout.astro index d0aed266ff..aabe75d0ef 100644 --- a/src/layouts/MainLayout.astro +++ b/src/layouts/MainLayout.astro @@ -23,7 +23,7 @@ const { content, headings, breadcrumbTitle, showMarkdownActions = true } = Astro --- - + { Astro.url.pathname !== '/' && ( @@ -63,10 +63,24 @@ const { content, headings, breadcrumbTitle, showMarkdownActions = true } = Astro { Astro.url.pathname !== '/' && ( - + {/* PageFeedback also lives in the right sidebar (visible ≥82em). + Hide this footer copy on wide viewports so it doesn't double up. */} +
+ +
{showMarkdownActions && }
) }
+ + diff --git a/src/pages/changelog/[slug].astro b/src/pages/changelog/[slug].astro index 5ba001087e..431efdcd51 100644 --- a/src/pages/changelog/[slug].astro +++ b/src/pages/changelog/[slug].astro @@ -147,14 +147,6 @@ const accent = getProductAccent(primaryTag); font-size: 1.75rem; } } - /* Disable global heading auto-numbering */ - .changelog-detail .detail-title { - counter-increment: none !important; - } - .changelog-detail .detail-title::before { - content: none !important; - } - .detail-date { font-size: 0.8125rem; color: var(--theme-text-muted); @@ -300,13 +292,6 @@ const accent = getProductAccent(primaryTag); font-weight: 700; margin: 0 0 14px; } - /* Disable global heading auto-numbering on related-heading */ - .changelog-detail .related-heading { - counter-increment: none !important; - } - .changelog-detail .related-heading::before { - content: none !important; - } .related-grid { display: grid; grid-template-columns: 1fr 1fr; diff --git a/src/pages/changelog/index.astro b/src/pages/changelog/index.astro index 9cc78559dd..f716597333 100644 --- a/src/pages/changelog/index.astro +++ b/src/pages/changelog/index.astro @@ -283,13 +283,6 @@ const description = 'Latest product updates from Mergify.'; background: var(--theme-text); } - /* Year / month headings — disable global numbering */ - .changelog-page .cl-year > .cl-year-heading { - counter-increment: none !important; - } - .changelog-page .cl-year > .cl-year-heading::before { - content: none !important; - } .cl-year { margin-bottom: 0; } diff --git a/src/styles/api-reference.css b/src/styles/api-reference.css index 24a7285877..c9e3324519 100644 --- a/src/styles/api-reference.css +++ b/src/styles/api-reference.css @@ -113,11 +113,6 @@ margin: 0 0 0.5rem !important; color: var(--theme-text); scroll-margin-top: calc(var(--theme-navbar-height) + 1rem); - counter-increment: none; -} - -.endpoint-heading::before { - content: none !important; } .endpoint-head { diff --git a/src/styles/index.css b/src/styles/index.css index 6c19c2f8ba..bc2ec93b56 100644 --- a/src/styles/index.css +++ b/src/styles/index.css @@ -826,6 +826,10 @@ pre { margin-bottom: 0.25em; } +.content-title.hero-accent { + color: var(--section-accent); +} + #main-content h2.content-subtitle, .content-subtitle { font-size: 1.125rem; @@ -866,20 +870,3 @@ pre { header .nav-wrapper { height: 100%; } - -article.content { - counter-reset: h2-section; -} - -.content h2:not(.content-subtitle):not(.no-counter) { - counter-increment: h2-section; - position: relative; -} - -.content h2:not(.content-subtitle):not(.no-counter)::before { - content: counter(h2-section); - font-weight: 500; - margin-right: 0.55rem; - color: var(--theme-text-muted); - opacity: 0.6; -}