1
0
Fork 0
forked from infra/ansible

forgejo: wip distgit role

Signed-off-by: David Kirwan <davidkirwanirl@gmail.com>
This commit is contained in:
David Kirwan 2025-12-05 14:25:37 +00:00
commit 185e0c81ed
Signed by untrusted user: dkirwan
GPG key ID: A5893AB6474AC37D
27 changed files with 2241 additions and 0 deletions

View file

@ -0,0 +1,4 @@
---
forgejo_namespace: "forgejo"
forgejo_project_description: "Forgejo Gitforge"
forgejo_application_name: "{{ forgejo_namespace }}"

View file

@ -0,0 +1,2 @@
@import "theme-fedora-light.css";
@import "theme-fedora-dark.css" (prefers-color-scheme: dark);

View file

@ -0,0 +1,357 @@
@import "../chroma/dark.css";
@import "../codemirror/dark.css";
@import "../markup/dark.css";
:root {
--steel-900: #10161d;
--steel-850: #131a21;
--steel-800: #171e26;
--steel-750: #1d262f;
--steel-700: #242d38;
--steel-650: #2b3642;
--steel-600: #374351;
--steel-550: #445161;
--steel-500: #515f70;
--steel-450: #5f6e80;
--steel-400: #6d7d8f;
--steel-350: #7c8c9f;
--steel-300: #8c9caf;
--steel-250: #9dadc0;
--steel-200: #aebed0;
--steel-150: #c0cfe0;
--steel-100: #d2e0f0;
--is-dark-theme: true;
--color-primary: #51a2da;
--color-primary-contrast: #000000;
--color-primary-dark-1: #8fb5f7;
--color-primary-dark-2: #5f95e2;
--color-primary-dark-3: #4e82c9;
--color-primary-dark-4: #3d6ba6;
--color-primary-dark-5: #32527f;
--color-primary-dark-6: #2a4264;
--color-primary-dark-7: #20344c;
--color-primary-light-1: #aad0ee;
--color-primary-light-2: #c4d7ff;
--color-primary-light-3: #e8f0ff;
--color-primary-light-4: #f6faff;
--color-primary-light-5: #ffffff;
--color-primary-light-6: #ffffff;
--color-primary-light-7: #ffffff;
--color-primary-alpha-10: #dcebf8;
--color-primary-alpha-20: #dcebf3;
--color-primary-alpha-30: #dcebfd;
--color-primary-alpha-40: #dcebf6;
--color-primary-alpha-50: #dcebf0;
--color-primary-alpha-60: #dcebf9;
--color-primary-alpha-70: #dcebfb;
--color-primary-alpha-80: #dcebfc;
--color-primary-alpha-90: #dcebf1;
--color-primary-hover: var(--color-primary-light-1);
--color-primary-active: var(--color-primary-light-2);
--color-secondary: var(--steel-700);
--color-secondary-dark-1: var(--steel-550);
--color-secondary-dark-2: var(--steel-500);
--color-secondary-dark-3: var(--steel-450);
--color-secondary-dark-4: var(--steel-400);
--color-secondary-dark-5: var(--steel-350);
--color-secondary-dark-6: var(--steel-300);
--color-secondary-dark-7: var(--steel-250);
--color-secondary-dark-8: var(--steel-200);
--color-secondary-dark-9: var(--steel-150);
--color-secondary-dark-10: var(--steel-100);
--color-secondary-dark-11: var(--steel-100);
--color-secondary-dark-12: var(--steel-100);
--color-secondary-dark-13: var(--steel-100);
--color-secondary-light-1: var(--steel-650);
--color-secondary-light-2: var(--steel-700);
--color-secondary-light-3: var(--steel-750);
--color-secondary-light-4: var(--steel-800);
--color-secondary-alpha-10: #2b364219;
--color-secondary-alpha-20: #2b364233;
--color-secondary-alpha-30: #2b36424b;
--color-secondary-alpha-40: #2b364266;
--color-secondary-alpha-50: #2b364280;
--color-secondary-alpha-60: #2b364299;
--color-secondary-alpha-70: #2b3642b3;
--color-secondary-alpha-80: #2b3642cc;
--color-secondary-alpha-90: #2b3642e1;
--color-secondary-hover: var(--color-secondary-light-1);
--color-secondary-active: var(--color-secondary-light-2);
/* console colors - used for actions console and console files */
--color-console-fg: #eeeff2;
--color-console-fg-subtle: #959cab;
--color-console-bg: #1f212b;
--color-console-border: #383c47;
--color-console-hover-bg: #ffffff16;
--color-console-active-bg: #454a57;
--color-console-menu-bg: #383c47;
--color-console-menu-border: #5c6374;
/* colors */
--color-red: #b91c1c;
--color-orange: #ea580c;
--color-yellow: #ca8a04;
--color-olive: #91a313;
--color-green: #15803d;
--color-teal: #0d9488;
--color-blue: #2563eb;
--color-violet: #7c3aed;
--color-purple: #9333ea;
--color-pink: #db2777;
--color-brown: #a47252;
--color-grey: var(--steel-500);
--color-black: #111827;
/* light variants */
--color-red-light: #dc2626;
--color-orange-light: #f97316;
--color-yellow-light: #eab308;
--color-olive-light: #839311;
--color-green-light: #16a34a;
--color-teal-light: #14b8a6;
--color-blue-light: #3b82f6;
--color-violet-light: #8b5cf6;
--color-purple-light: #a855f7;
--color-pink-light: #ec4899;
--color-brown-light: #94674a;
--color-grey-light: var(--steel-300);
--color-black-light: #1f2937;
/* dark 1 variants produced via Sass scale-color(color, $lightness: -10%) */
--color-red-dark-1: #a71919;
--color-orange-dark-1: #d34f0b;
--color-yellow-dark-1: #b67c04;
--color-olive-dark-1: #839311;
--color-green-dark-1: #137337;
--color-teal-dark-1: #0c857a;
--color-blue-dark-1: #1554e0;
--color-violet-dark-1: #6a1feb;
--color-purple-dark-1: #8519e7;
--color-pink-dark-1: #c7216b;
--color-brown-dark-1: #94674a;
--color-black-dark-1: #0f1623;
/* dark 2 variants produced via Sass scale-color(color, $lightness: -20%) */
--color-red-dark-2: #941616;
--color-orange-dark-2: #bb460a;
--color-yellow-dark-2: #ca8a04;
--color-olive-dark-2: #91a313;
--color-green-dark-2: #15803d;
--color-teal-dark-2: #0a766d;
--color-blue-dark-2: #2563eb;
--color-violet-dark-2: #5c14d8;
--color-purple-dark-2: #7c3aed;
--color-pink-dark-2: #b11d5f;
--color-brown-dark-2: #a47252;
--color-black-dark-2: #111827;
/* ansi colors used for actions console and console files */
--color-ansi-black: #1d2328;
--color-ansi-red: #cc4848;
--color-ansi-green: #87ab63;
--color-ansi-yellow: #cc9903;
--color-ansi-blue: #3a8ac6;
--color-ansi-magenta: #d22e8b;
--color-ansi-cyan: #00918a;
--color-ansi-white: var(--color-console-fg-subtle);
--color-ansi-bright-black: #424851;
--color-ansi-bright-red: #d15a5a;
--color-ansi-bright-green: #93b373;
--color-ansi-bright-yellow: #eaaf03;
--color-ansi-bright-blue: #4e96cc;
--color-ansi-bright-magenta: #d74397;
--color-ansi-bright-cyan: #00b6ad;
--color-ansi-bright-white: var(--color-console-fg);
/* other colors */
--color-gold: #b1983b;
--color-white: #ffffff;
--color-pure-black: #000000;
--color-diff-removed-word-bg: #783030;
--color-diff-added-word-bg: #255c39;
--color-diff-removed-row-bg: #432121;
--color-diff-moved-row-bg: #825718;
--color-diff-added-row-bg: #1b3625;
--color-diff-removed-row-border: #783030;
--color-diff-moved-row-border: #a67a1d;
--color-diff-added-row-border: #255c39;
--color-diff-inactive: var(--steel-650);
--color-error-border: #783030;
--color-error-bg: #5f2525;
--color-error-bg-active: #783030;
--color-error-bg-hover: #783030;
--color-error-text: #fef2f2;
--color-success-border: #1f6e3c;
--color-success-bg: #1d462c;
--color-success-text: #aef0c2;
--color-warning-border: #a67a1d;
--color-warning-bg: #644821;
--color-warning-text: #fff388;
--color-info-border: #2e50b0;
--color-info-bg: #2a396b;
--color-info-text: var(--steel-100);
--color-red-badge: #b91c1c;
--color-red-badge-bg: #b91c1c22;
--color-red-badge-hover-bg: #b91c1c44;
--color-green-badge: #16a34a;
--color-green-badge-bg: #16a34a22;
--color-green-badge-hover-bg: #16a34a44;
--color-yellow-badge: #ca8a04;
--color-yellow-badge-bg: #ca8a0422;
--color-yellow-badge-hover-bg: #ca8a0444;
--color-orange-badge: #ea580c;
--color-orange-badge-bg: #ea580c22;
--color-orange-badge-hover-bg: #ea580c44;
--color-git: #f05133;
/* Icon colors (PR/Issue/...) */
--color-icon-green: #3fb950;
--color-icon-red: #f85149;
--color-icon-purple: #aa76ff;
/* target-based colors */
--color-body: var(--steel-800);
--color-box-header: var(--steel-700);
--color-box-body: var(--steel-750);
--color-box-body-highlight: var(--steel-650);
--color-text-dark: #fff;
--color-text: var(--steel-100);
--color-text-light: var(--steel-150);
--color-text-light-1: var(--steel-150);
--color-text-light-2: var(--steel-200);
--color-text-light-3: var(--steel-200);
--color-footer: var(--steel-900);
--color-timeline: var(--steel-650);
--color-input-text: var(--steel-100);
--color-input-background: var(--steel-650);
--color-input-toggle-background: var(--steel-650);
--color-input-border: var(--steel-550);
--color-input-border-hover: var(--steel-450);
--color-header-wrapper: var(--steel-850);
--color-header-wrapper-transparent: #242d3800;
--color-light: #00000028;
--color-light-mimic-enabled: rgba(0, 0, 0, calc(40 / 255 * 222 / 255 / var(--opacity-disabled)));
--color-light-border: #ffffff28;
--color-hover: var(--steel-600);
--color-active: var(--steel-650);
--color-menu: var(--steel-700);
--color-card: var(--steel-700);
--color-markup-table-row: #ffffff06;
--color-markup-code-block: var(--steel-800);
--color-markup-code-inline: var(--steel-850);
--color-button: var(--steel-600);
--color-code-bg: var(--steel-750);
--color-shadow: #00000060;
--color-secondary-bg: var(--steel-700);
--color-text-focus: #fff;
--color-expand-button: #3c404d;
--color-placeholder-text: var(--color-text-light-3);
--color-editor-line-highlight: var(--steel-700);
--color-project-board-bg: var(--color-secondary-light-3);
--color-project-board-dark-label: var(--color-text-light-3);
--color-caret: var(--color-text);
/* should ideally be --color-text-dark, see #15651 */
--color-reaction-bg: #ffffff12;
--color-reaction-active-bg: var(--color-primary-alpha-30);
--color-reaction-hover-bg: var(--color-primary-alpha-40);
--color-tooltip-text: #ffffff;
--color-tooltip-bg: #000000f0;
--color-nav-bg: var(--steel-900);
--color-nav-hover-bg: var(--steel-600);
--color-nav-text: var(--color-text);
--color-secondary-nav-bg: var(--color-body);
--color-label-text: #fff;
--color-label-bg: var(--steel-600);
--color-label-hover-bg: var(--steel-550);
--color-label-active-bg: var(--steel-500);
--color-label-bg-alt: var(--steel-550);
--color-accent: var(--color-primary-light-1);
--color-small-accent: var(--color-primary-light-5);
--color-highlight-fg: var(--color-primary-light-4);
--color-highlight-bg: var(--color-primary-alpha-20);
--color-overlay-backdrop: #080808c0;
/* pattern colors for image diff */
--checkerboard-color-1: #474747;
--checkerboard-color-2: #313131;
accent-color: var(--color-accent);
color-scheme: dark;
}
/* invert emojis that are hard to read otherwise */
.emoji[aria-label="check mark"],
.emoji[aria-label="currency exchange"],
.emoji[aria-label="TOP arrow"],
.emoji[aria-label="END arrow"],
.emoji[aria-label="ON! arrow"],
.emoji[aria-label="SOON arrow"],
.emoji[aria-label="heavy dollar sign"],
.emoji[aria-label="copyright"],
.emoji[aria-label="registered"],
.emoji[aria-label="trade mark"],
.emoji[aria-label="multiply"],
.emoji[aria-label="plus"],
.emoji[aria-label="minus"],
.emoji[aria-label="divide"],
.emoji[aria-label="curly loop"],
.emoji[aria-label="double curly loop"],
.emoji[aria-label="wavy dash"],
.emoji[aria-label="paw prints"],
.emoji[aria-label="musical note"],
.emoji[aria-label="musical notes"] {
filter: invert(100%) hue-rotate(180deg);
}
i.grey.icon.icon.icon.icon {
color: var(--steel-350) !important;
}
.ui.secondary.vertical.menu {
border-radius: 0.28571429rem !important;
overflow: hidden;
}
.ui.basic.primary.button.item {
background-color: var(--color-active) !important;
color: var(--color-text) !important;
box-shadow: none !important;
}
.ui.red.label.notification_count,
.ui.primary.label,
.ui.primary.labels .label {
background-color: var(--color-primary-light-3) !important;
}
.repository.view.issue .comment-list .code-comment + .code-comment {
margin: 1.25rem 0 !important;
padding-top: 1.25rem !important;
border-top-color: var(--steel-650) !important;
}
.ui.labeled.icon.buttons > .button > .icon,
.ui.labeled.icon.button > .icon {
background-color: var(--color-light) !important;
}
#review-box .review-comments-counter {
background-color: var(--color-shadow) !important;
color: var(--color-white) !important;
margin-left: 0.5em;
}
.ui.basic.labels .primary.label,
.ui.ui.ui.basic.primary.label {
color: var(--color-text-dark) !important;
}
.ui.basic.yellow.label.pending-label {
background: var(--color-light) !important;
}
::selection {
background: var(--steel-100) !important;
color: var(--color-pure-black) !important;
}
strong.attention-important, svg.attention-important {
color: var(--color-violet-light);
}
strong.attention-note, svg.attention-note {
color: var(--color-blue-light);
}
strong.attention-caution, svg.attention-caution {
color: var(--color-red-light);
}
.ui.basic.red.button {
background-color: var(--color-red);
color: var(--color-white);
}
.ui.basic.red.button:hover,
.ui.basic.red.button:focus {
background-color: var(--color-red-dark-1);
color: var(--color-white);
}
.ui.basic.red.button:active {
background-color: var(--color-red-dark-2);
color: var(--color-white);
}

View file

@ -0,0 +1,325 @@
@import "../chroma/light.css";
@import "../codemirror/light.css";
@import "../markup/light.css";
:root {
--steel-900: #10161d;
--steel-850: #131a21;
--steel-800: #171e26;
--steel-750: #1d262f;
--steel-700: #242d38;
--steel-650: #2b3642;
--steel-600: #374351;
--steel-550: #445161;
--steel-500: #515f70;
--steel-450: #5f6e80;
--steel-400: #6d7d8f;
--steel-350: #7c8c9f;
--steel-300: #8c9caf;
--steel-250: #9dadc0;
--steel-200: #aebed0;
--steel-150: #c0cfe0;
--steel-100: #d2e0f0;
--zinc-50: #fafafa;
--zinc-100: #f4f4f5;
--zinc-150: #ececee;
--zinc-200: #e4e4e7;
--zinc-250: #dcdce0;
--zinc-300: #d4d4d8;
--zinc-350: #babac1;
--zinc-400: #a1a1aa;
--zinc-450: #898992;
--zinc-500: #71717a;
--zinc-550: #61616a;
--zinc-600: #52525b;
--zinc-650: #484850;
--zinc-700: #3f3f46;
--zinc-750: #333338;
--zinc-800: #27272a;
--zinc-850: #1f1f23;
--zinc-900: #18181b;
--is-light-theme: true;
--color-primary: #3c6eb4;
--color-primary-contrast: #ffffff;
--color-primary-dark-1: #2e5589;
--color-primary-dark-2: #274a75;
--color-primary-dark-3: #1e3a61;
--color-primary-dark-4: #1a3353;
--color-primary-dark-5: #16304a;
--color-primary-dark-6: #11273f;
--color-primary-dark-7: #0d1e34;
--color-primary-light-1: #8faed9;
--color-primary-light-2: #a7c4e8;
--color-primary-light-3: #c8d8f3;
--color-primary-light-4: #dce5fa;
--color-primary-light-5: #ffffff;
--color-primary-light-6: #ffffff;
--color-primary-light-7: #ffffff;
--color-primary-alpha-10: #3c6eb41a;
--color-primary-alpha-20: #3c6eb433;
--color-primary-alpha-30: #3c6eb44d;
--color-primary-alpha-40: #3c6eb466;
--color-primary-alpha-50: #3c6eb480;
--color-primary-alpha-60: #3c6eb499;
--color-primary-alpha-70: #3c6eb4b3;
--color-primary-alpha-80: #3c6eb4cc;
--color-primary-alpha-90: #3c6eb4e1;
--color-primary-hover: var(--color-primary-dark-2);
--color-primary-active: var(--color-primary-dark-4);
--color-secondary: var(--zinc-200);
--color-secondary-dark-1: var(--zinc-200);
--color-secondary-dark-2: var(--zinc-300);
--color-secondary-dark-3: var(--zinc-300);
--color-secondary-dark-4: var(--zinc-400);
--color-secondary-dark-5: var(--zinc-400);
--color-secondary-dark-6: var(--zinc-500);
--color-secondary-dark-7: var(--zinc-500);
--color-secondary-dark-8: var(--zinc-600);
--color-secondary-dark-9: var(--zinc-600);
--color-secondary-dark-10: var(--zinc-700);
--color-secondary-dark-11: var(--zinc-700);
--color-secondary-dark-12: var(--zinc-800);
--color-secondary-dark-13: var(--zinc-800);
--color-secondary-light-1: var(--zinc-200);
--color-secondary-light-2: var(--zinc-100);
--color-secondary-light-3: var(--zinc-100);
--color-secondary-light-4: var(--zinc-50);
--color-secondary-alpha-10: #d4d4d819;
--color-secondary-alpha-20: #d4d4d833;
--color-secondary-alpha-30: #d4d4d84b;
--color-secondary-alpha-40: #d4d4d866;
--color-secondary-alpha-50: #d4d4d880;
--color-secondary-alpha-60: #d4d4d899;
--color-secondary-alpha-70: #d4d4d8b3;
--color-secondary-alpha-80: #d4d4d8cc;
--color-secondary-alpha-90: #d4d4d8e1;
--color-secondary-hover: var(--color-secondary-dark-2);
--color-secondary-active: var(--color-secondary-dark-4);
/* console colors - used for actions console and console files */
--color-console-fg: #eeeff2;
--color-console-fg-subtle: #959cab;
--color-console-bg: #1f212b;
--color-console-border: #383c47;
--color-console-hover-bg: #ffffff16;
--color-console-active-bg: #454a57;
--color-console-menu-bg: #383c47;
--color-console-menu-border: #5c6374;
/* colors */
--color-red: #dc2626;
--color-orange: #ea580c;
--color-yellow: #ca8a04;
--color-olive: #91a313;
--color-green: #15803d;
--color-teal: #0d9488;
--color-blue: #2563eb;
--color-violet: #7c3aed;
--color-purple: #9333ea;
--color-pink: #db2777;
--color-brown: #a47252;
--color-grey: #4b5563;
--color-black: #000000;
/* light variants */
--color-red-light: #ef4444;
--color-orange-light: #f97316;
--color-yellow-light: #eab308;
--color-olive-light: #839311;
--color-green-light: #16a34a;
--color-teal-light: #14b8a6;
--color-blue-light: #3b82f6;
--color-violet-light: #8b5cf6;
--color-purple-light: #a855f7;
--color-pink-light: #ec4899;
--color-brown-light: #94674a;
--color-grey-light: #6b7280;
--color-black-light: #181818;
/* dark 1 variants - produced via Sass scale-color(color, $lightness: -10%) */
--color-red-dark-1: #c82020;
--color-orange-dark-1: #d34f0b;
--color-yellow-dark-1: #b67c04;
--color-olive-dark-1: #839311;
--color-green-dark-1: #137337;
--color-teal-dark-1: #0c857a;
--color-blue-dark-1: #1554e0;
--color-violet-dark-1: #6a1feb;
--color-purple-dark-1: #8519e7;
--color-pink-dark-1: #c7216b;
--color-brown-dark-1: #94674a;
--color-black-dark-1: #000000;
/* dark 2 variants - produced via Sass scale-color(color, $lightness: -20%) */
--color-red-dark-2: #b21d1d;
--color-orange-dark-2: #bb460a;
--color-yellow-dark-2: #a26e03;
--color-olive-dark-2: #74820f;
--color-green-dark-2: #116631;
--color-teal-dark-2: #0a766d;
--color-blue-dark-2: #124bc7;
--color-violet-dark-2: #5c14d8;
--color-purple-dark-2: #7715cf;
--color-pink-dark-2: #b11d5f;
--color-brown-dark-2: #835b42;
--color-black-dark-2: #000000;
/* ansi colors used for actions console and console files */
--color-ansi-black: #1f2326;
--color-ansi-red: #cc4848;
--color-ansi-green: #87ab63;
--color-ansi-yellow: #cc9903;
--color-ansi-blue: #3a8ac6;
--color-ansi-magenta: #d22e8b;
--color-ansi-cyan: #00918a;
--color-ansi-white: var(--color-console-fg-subtle);
--color-ansi-bright-black: #46494d;
--color-ansi-bright-red: #d15a5a;
--color-ansi-bright-green: #93b373;
--color-ansi-bright-yellow: #eaaf03;
--color-ansi-bright-blue: #4e96cc;
--color-ansi-bright-magenta: #d74397;
--color-ansi-bright-cyan: #00b6ad;
--color-ansi-bright-white: var(--color-console-fg);
/* other colors */
--color-gold: #b1983b;
--color-white: #ffffff;
--color-diff-removed-word-bg: #fca5a5;
--color-diff-added-word-bg: #86efac;
--color-diff-removed-row-bg: #fee2e2;
--color-diff-moved-row-bg: #fef9c3;
--color-diff-added-row-bg: #dcfce7;
--color-diff-removed-row-border: #fca5a5;
--color-diff-moved-row-border: #fde047;
--color-diff-added-row-border: #86efac;
--color-diff-inactive: var(--zinc-100);
--color-error-border: #fecaca;
--color-error-bg: #fee2e2;
--color-error-bg-active: #fca5a5;
--color-error-bg-hover: #fecaca;
--color-error-text: #7f1d1d;
--color-success-border: #bbf7d0;
--color-success-bg: #dcfce7;
--color-success-text: #14532d;
--color-warning-border: #fde047;
--color-warning-bg: #fef3c7;
--color-warning-text: #78350f;
--color-info-border: #bae6fd;
--color-info-bg: #e0f2fe;
--color-info-text: #0c4a6e;
--color-red-badge: #b91c1c;
--color-red-badge-bg: #b91c1c22;
--color-red-badge-hover-bg: #b91c1c44;
--color-green-badge: #16a34a;
--color-green-badge-bg: #16a34a22;
--color-green-badge-hover-bg: #16a34a44;
--color-yellow-badge: #ca8a04;
--color-yellow-badge-bg: #ca8a0422;
--color-yellow-badge-hover-bg: #ca8a0444;
--color-orange-badge: #ea580c;
--color-orange-badge-bg: #ea580c22;
--color-orange-badge-hover-bg: #ea580c44;
--color-git: #f05133;
/* Icon colors (PR/Issue/...) */
--color-icon-green: var(--color-green-light);
--color-icon-red: var(--color-red-light);
--color-icon-purple: var(--color-purple-light);
/* target-based colors */
--color-body: #fff;
--color-box-header: var(--zinc-100);
--color-box-body: var(--zinc-50);
--color-box-body-highlight: var(--zinc-200);
--color-text-dark: #000;
--color-text: var(--zinc-900);
--color-text-light: var(--zinc-700);
--color-text-light-1: var(--zinc-650);
--color-text-light-2: var(--zinc-600);
--color-text-light-3: var(--zinc-550);
--color-footer: var(--zinc-100);
--color-timeline: var(--zinc-200);
--color-input-text: var(--zinc-800);
--color-input-background: #fff;
--color-input-toggle-background: #fff;
--color-input-border: var(--zinc-300);
--color-input-border-hover: var(--zinc-400);
--color-header-wrapper: var(--zinc-50);
--color-header-wrapper-transparent: #d2e0f000;
--color-light: #ffffffcc;
--color-light-mimic-enabled: rgba(0, 0, 0, calc(6 / 255 * 222 / 255 / var(--opacity-disabled)));
--color-light-border: #0000001d;
--color-hover: #e4e4e4aa;
--color-active: #d4d4d8aa;
--color-menu: var(--zinc-100);
--color-card: var(--zinc-50);
--color-markup-table-row: #ffffff06;
--color-markup-code-block: var(--zinc-150);
--color-markup-code-inline: var(--zinc-200);
--color-button: var(--zinc-150);
--color-code-bg: var(--zinc-50);
--color-shadow: #00000060;
--color-secondary-bg: var(--zinc-100);
--color-text-focus: #fff;
--color-expand-button: var(--zinc-200);
--color-placeholder-text: var(--color-text-light-3);
--color-editor-line-highlight: var(--zinc-100);
--color-project-board-bg: var(--color-secondary-light-2);
--color-project-board-dark-label: var(--color-text-light-3);
--color-caret: var(--color-text);
/* should ideally be --color-text-dark, see #15651 */
--color-reaction-bg: #0000000a;
--color-reaction-active-bg: var(--color-primary-alpha-20);
--color-reaction-hover-bg: var(--color-primary-alpha-30);
--color-tooltip-text: #ffffff;
--color-tooltip-bg: #000000f0;
--color-nav-bg: var(--zinc-200);
--color-nav-hover-bg: var(--zinc-300);
--color-nav-text: var(--color-text);
--color-secondary-nav-bg: var(--color-body);
--color-label-text: var(--color-text);
--color-label-bg: #cacaca7b;
--color-label-hover-bg: #cacacaa0;
--color-label-active-bg: #cacacaff;
--color-label-bg-alt: #cacacaff;
--color-accent: var(--color-primary-light-1);
--color-small-accent: var(--color-primary-light-5);
--color-highlight-fg: var(--color-primary-light-4);
--color-highlight-bg: var(--color-primary-light-6);
--color-overlay-backdrop: #080808c0;
/* pattern colors for gradient */
--checkerboard-color-1: #ffffff;
--checkerboard-color-2: #e5e5e5;
accent-color: var(--color-accent);
color-scheme: light;
}
.ui.secondary.vertical.menu {
border-radius: 0.28571429rem !important;
overflow: hidden;
}
.ui.basic.primary.button.item {
background-color: var(--color-active) !important;
color: var(--color-text) !important;
box-shadow: none !important;
}
.ui.red.label.notification_count,
.ui.primary.labels .label {
background-color: var(--color-primary-dark-1) !important;
}
.repository.view.issue .comment-list .code-comment + .code-comment {
margin: 1.25rem 0 !important;
padding-top: 1.25rem !important;
border-top-color: var(--zinc-250) !important;
}
.ui.labeled.icon.buttons > .button > .icon,
.ui.labeled.icon.button > .icon {
background-color: var(--color-shadow) !important;
}
#review-box .review-comments-counter {
background-color: var(--color-label-bg) !important;
margin-left: 0.5em;
}
.ui.basic.labels .primary.label,
.ui.ui.ui.basic.primary.label {
color: var(--color-text-dark) !important;
}
.ui.yellow.label.pending-label {
background: var(--color-warning-bg) !important;
color: var(--color-text-dark) !important;
}
::selection {
background: var(--steel-450) !important;
color: var(--color-white) !important;
}

View file

@ -0,0 +1,28 @@
---
- name: Generate the values.yaml from template
ansible.builtin.template:
src: "values.yaml.j2"
dest: "/root/ocp4/openshift-apps/forgejo/helm-values.yaml"
mode: "0770"
- name: Git clone the Fedora Forgejo Helm Chart
ansible.builtin.git:
repo: "https://codeberg.org/fedora/forgejo-helm.git"
dest: /tmp/forgejo-helm_repo
- name: Build Helm chart dependencies
ansible.builtin.command:
cmd: helm dependency update
chdir: /tmp/forgejo-helm_repo/
changed_when: true
- name: Deploy Forgejo chart from local path
kubernetes.core.helm:
name: forgejo
create_namespace: true
chart_ref: /tmp/forgejo-helm_repo/
release_name: forgejo
release_namespace: forgejo
values_files:
- "/root/ocp4/openshift-apps/forgejo/helm-values.yaml"

View file

@ -0,0 +1,16 @@
---
- name: Generate the forgejo-runners.yaml from template
ansible.builtin.template:
src: "forgejo-runners.yaml.j2"
dest: "/root/ocp4/openshift-apps/forgejo/forgejo-runners-vars.yaml"
mode: "0770"
- name: Checkout the Forgejo Runners Playbook
ansible.builtin.git:
repo: "https://codeberg.org/fedora/ansible-role-forgejo-runner.git"
dest: "/root/ocp4/openshift-apps/forgejo/ansible-role-forgejo-runner"
# Later we can extend this task to run the runners playbook/role
#

View file

@ -0,0 +1,11 @@
---
- name: Generate the custom-theme-configmap.yaml from template
ansible.builtin.template:
src: "custom-theme-configmap.yaml.j2"
dest: "/root/ocp4/openshift-apps/forgejo/custom-theme-configmap.yaml"
mode: "0770"
- name: Deploy the custom-theme-configmap.yaml config
kubernetes.core.k8s:
state: present
src: "/root/ocp4/openshift-apps/forgejo/custom-theme-configmap.yaml"

View file

@ -0,0 +1,11 @@
---
- name: Generate the forgejo-namespace.yaml from template
ansible.builtin.template:
src: "forgejo-namespace.yaml.j2"
dest: "/root/ocp4/openshift-apps/forgejo/forgejo-namespace.yaml"
mode: "0770"
- name: Deploy the forgejo-namespace.yaml config
kubernetes.core.k8s:
state: present
src: "/root/ocp4/openshift-apps/forgejo/forgejo-namespace.yaml"

View file

@ -0,0 +1,22 @@
---
- name: Generate the forgejo-pvc.yaml from template
ansible.builtin.template:
src: "forgejo-pvc.yaml.j2"
dest: "/root/ocp4/openshift-apps/forgejo/forgejo-pvc.yaml"
mode: "0770"
- name: Deploy the forgejo-pvc.yaml config
kubernetes.core.k8s:
state: present
src: "/root/ocp4/openshift-apps/forgejo/forgejo-pvc.yaml"
- name: Generate the forgejo-pv.yaml from template
ansible.builtin.template:
src: "forgejo-pv.yaml.j2"
dest: "/root/ocp4/openshift-apps/forgejo/forgejo-pv.yaml"
mode: "0770"
- name: Deploy the forgejo-pv.yaml config
kubernetes.core.k8s:
state: present
src: "/root/ocp4/openshift-apps/forgejo/forgejo-pv.yaml"

View file

@ -0,0 +1,11 @@
---
- name: Generate the forgejo-runnerhost-vm.yaml from template
ansible.builtin.template:
src: "forgejo-runnerhost-vm.yaml.j2"
dest: "/root/ocp4/openshift-apps/forgejo/forgejo-runnerhost-vm.yaml"
mode: "0770"
- name: Deploy the forgejo-runnerhost-vm.yaml config
kubernetes.core.k8s:
state: present
src: "/root/ocp4/openshift-apps/forgejo/forgejo-runnerhost-vm.yaml"

View file

@ -0,0 +1,26 @@
---
- name: Generate the postgres-cluster.yaml from template
ansible.builtin.template:
src: "postgres-cluster.yaml.j2"
dest: "/root/ocp4/openshift-apps/forgejo/postgres-cluster.yaml"
mode: "0770"
- name: Generate the postgres-secret.yaml from template
ansible.builtin.template:
src: "postgres-secret.yaml.j2"
dest: "/root/ocp4/openshift-apps/forgejo/postgres-secret.yaml"
mode: "0770"
- name: Deploy the postgres-cluster.yaml config
kubernetes.core.k8s:
state: present
src: "/root/ocp4/openshift-apps/forgejo/postgres-cluster.yaml"
- name: Deploy the postgres-secret.yaml secret
kubernetes.core.k8s:
state: present
src: "/root/ocp4/openshift-apps/forgejo/postgres-secret.yaml"
- name: Sleep for 30 seconds, allow postgresql time to come up and then continue with play
ansible.builtin.wait_for:
timeout: 30

View file

@ -0,0 +1,75 @@
---
# generate the templates for project to be created
- name: Create the valkey configmap template
ansible.builtin.template:
src: "valkey-configmap.yaml.j2"
dest: "/root/ocp4/openshift-apps/forgejo/valkey-configmap.yaml"
mode: "0770"
tags:
- valkey
# apply created openshift resources
- name: Oc apply resources for the valkey configmap
ansible.builtin.command: "/root/bin/oc apply -f /root/ocp4/openshift-apps/forgejo/valkey-configmap.yaml"
retries: 3
delay: 5
register: deployment_result
until: deployment_result.rc == 0
tags:
- valkey
- name: Create the valkey secret template
ansible.builtin.template:
src: "valkey-secret.yaml.j2"
dest: "/root/ocp4/openshift-apps/forgejo/valkey-secret.yaml"
mode: "0770"
tags:
- valkey
# apply created openshift resources
- name: Oc apply resources for the valkey secret
ansible.builtin.command: "/root/bin/oc apply -f /root/ocp4/openshift-apps/forgejo/valkey-secret.yaml"
retries: 3
delay: 5
register: deployment_result
until: deployment_result.rc == 0
tags:
- valkey
- name: Create the valkey service template
ansible.builtin.template:
src: "valkey-service.yaml.j2"
dest: "/root/ocp4/openshift-apps/forgejo/valkey-service.yaml"
mode: "0770"
tags:
- valkey
# apply created openshift resources
- name: Oc apply resources
ansible.builtin.command: "/root/bin/oc apply -f /root/ocp4/openshift-apps/forgejo/valkey-service.yaml"
retries: 3
delay: 5
register: deployment_result
until: deployment_result.rc == 0
tags:
- valkey
- name: Create the valkey statefulset template
ansible.builtin.template:
src: "valkey-statefulset.yaml.j2"
dest: "/root/ocp4/openshift-apps/forgejo/valkey-statefulset.yaml"
mode: "0770"
tags:
- valkey
# apply created openshift resources
- name: Oc apply resources
ansible.builtin.command: "/root/bin/oc apply -f /root/ocp4/openshift-apps/forgejo/valkey-statefulset.yaml"
retries: 3
delay: 5
register: deployment_result
until: deployment_result.rc == 0
tags:
- valkey

View file

@ -0,0 +1,14 @@
---
- name: Ensures /root/ocp4/openshift-apps/forgejo/ dir exists
ansible.builtin.file:
path: "/root/ocp4/openshift-apps/forgejo/"
state: directory
- include_tasks: create-forgejo-namespace.yaml
- include_tasks: create-forgejo-pvc.yaml
- include_tasks: create-postgres-operator-config.yaml
# - include_tasks: create-custom-theme-configmap.yaml
- include_tasks: deploy-valkey.yaml
- include_tasks: call-helm.yaml
- include_tasks: create-forgejo-runnerhost-vm.yaml
- include_tasks: copy-forgejo-runner-vars.yaml

View file

@ -0,0 +1,14 @@
---
apiVersion: v1
kind: ConfigMap
metadata:
name: forgejo-custom-theme
namespace: distgit
data:
# Custom themes loaded from separate CSS files
theme-fedora-2-light.css: |
{{ lookup('file', 'themes/theme-fedora-2-light.css') | indent(4, true) }}
theme-fedora-2-dark.css: |
{{ lookup('file', 'themes/theme-fedora-2-dark.css') | indent(4, true) }}
theme-fedora-2-auto.css: |
{{ lookup('file', 'themes/theme-fedora-2-auto.css') | indent(4, true) }}

View file

@ -0,0 +1,5 @@
---
apiVersion: v1
kind: Namespace
metadata:
name: "distgit"

View file

@ -0,0 +1,15 @@
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: distgit-volume
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 100Gi
nfs:
path: "{{ (env == 'production') | ternary(distgit_storage_path, distgit_stg_storage_path) }}"
server: "{{ (env == 'production') | ternary(distgit_storage_server, distgit_stg_storage_server) }}"
persistentVolumeReclaimPolicy: Retain
volumeMode: Filesystem

View file

@ -0,0 +1,25 @@
---
# PVC to mount the fedora-ostree-content-volume NFS share
# that has been mapped in to OpenShift by Fedora Infra for
# us from the NetApp. This corresponds to the fedora-ostree-content{,-stg}
# NetApp volumes which are mounted in other places as well.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: gitea-shared-storage
namespace: distgit
spec:
# fedora-ostree-content-volume-2 is one of two PVs that share
# the fedora-ostree-content NetApp volume
volumeName: "distgit-volume"
# Set the storageClassName to the empty string, otherwise it
# will get the cluster default storageClass and it won't match
# the named volume that already exists for us.
storageClassName: ""
# These values are mostly ignored since we're using a named
# volume, but are required.
accessModes:
- ReadWriteMany
resources:
requests:
storage: 100Gi

View file

@ -0,0 +1,60 @@
apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:
annotations:
name: distgit-runnerhost-vm
namespace: distgit
spec:
dataVolumeTemplates:
- metadata:
creationTimestamp: null
name: distgit-runnerhost-vm-volume
spec:
sourceRef:
kind: DataSource
name: fedora
namespace: openshift-virtualization-os-images
storage:
resources:
requests:
storage: 30Gi
instancetype:
kind: virtualmachineclusterinstancetype
name: u1.xlarge
preference:
kind: virtualmachineclusterpreference
name: fedora
runStrategy: Always
template:
metadata:
creationTimestamp: null
labels:
network.kubevirt.io/headlessService: headless
spec:
architecture: amd64
domain:
devices:
autoattachPodInterface: false
interfaces:
- macAddress: "{{ '02:79:58' | community.general.random_mac }}"
masquerade: {}
name: default
machine:
type: pc-q35-rhel9.6.0
resources: {}
networks:
- name: default
pod: {}
subdomain: headless
volumes:
- dataVolume:
name: distgit-runnerhost-vm-volume
name: rootdisk
- cloudInitNoCloud:
userData: |
#cloud-config
chpasswd:
expire: false
password: "{{ (env == 'production') | ternary(distgit_runnerhostvm_password, distgit_stg_runnerhostvm_password) }}"
user: "{{ (env == 'production') | ternary(distgit_runnerhostvm_user, distgit_stg_runnerhostvm_user) }}"
name: cloudinitdisk

View file

@ -0,0 +1,18 @@
---
# Forgejo instance URL
# External URL: https://forge.stg.fedoraproject.org
# Internal URL (accessible from VM): http://forgejo-http.forgejo.svc.cluster.local:3000
forgejo_instance_url: "{{ (env == 'production') | ternary(forgejo_runner_instance_url, forgejo_stg_runner_instance_url) }}"
# Forgejo runners to register and configure
# Note: Generate secrets with: openssl rand -hex 20
#
# Runner configuration:
# - name: Unique runner name
# - labels: List of label names (the runner container will automatically add schema:arg based on its environment)
# These are the label names that workflows will use in "runs-on"
# - image: Container image to use for the runner
# The image determines what execution environment and tools are available
# - secret: 40-character hex string for idempotent registration
#
forgejo_runners: {{ (env == 'production') | ternary(forgejo_runner_secrets, forgejo_stg_runner_secrets) }}

View file

@ -0,0 +1,68 @@
apiVersion: postgres-operator.crunchydata.com/v1beta1
kind: PostgresCluster
metadata:
annotations:
postgres-operator.crunchydata.com/autoCreateUserSchema: "true"
name: distgit-ha
namespace: distgit
spec:
spec:
users:
- name: gitea
databases:
- gitea
options: 'SUPERUSER'
postgresVersion: 17
instances:
- name: distgit-ha
replicas: 2
dataVolumeClaimSpec:
accessModes:
- "ReadWriteOnce"
resources:
requests:
storage: 5Gi
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
podAffinityTerm:
topologyKey: kubernetes.io/hostname
labelSelector:
matchLabels:
postgres-operator.crunchydata.com/cluster: distgit-ha
postgres-operator.crunchydata.com/instance-set: distgit-ha
backups:
pgbackrest:
global:
repo1-retention-full: "1"
repo1-retention-full-type: time
manual:
options:
- --type=full
repoName: repo1
repos:
- name: repo1
schedules:
full: 0 1 * * *
volume:
volumeClaimSpec:
accessModes:
- "ReadWriteOnce"
resources:
requests:
storage: 50Gi
proxy:
pgBouncer:
replicas: 2
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
podAffinityTerm:
topologyKey: kubernetes.io/hostname
labelSelector:
matchLabels:
postgres-operator.crunchydata.com/cluster: distgit-ha
postgres-operator.crunchydata.com/role: pgbouncer

View file

@ -0,0 +1,10 @@
apiVersion: v1
kind: Secret
metadata:
name: distgit-pguser
namespace: distgit
labels:
postgres-operator.crunchydata.com/cluster: distgit-ha
postgres-operator.crunchydata.com/pguser: gitea
stringData:
password: "{{ (env == 'production') | ternary(distgit_postgresql_password, distgit_stg_postgresql_password) }}"

View file

@ -0,0 +1,129 @@
---
apiVersion: v1
kind: ConfigMap
metadata:
name: valkey
namespace: distgit
data:
valkey.conf: |
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
port 6379
init-config.sh: |
#!/bin/sh
cp /etc/valkey/valkey.conf /tmp/valkey.conf
echo "requirepass ${VALKEY_PASSWORD}" >> /tmp/valkey.conf
echo "masterauth ${VALKEY_PASSWORD}" >> /tmp/valkey.conf
echo "cluster-announce-ip ${POD_IP}" >> /tmp/valkey.conf
cp /tmp/valkey.conf /config/valkey.conf
#mkdir -p /data
#chown -R 1000:1000 /data
init-cluster.sh: |
#!/bin/sh
set -e
# === Wait for local Valkey to be ready ================================
until valkey-cli -h localhost -p 6379 -a "${VALKEY_PASSWORD}" ping >/dev/null 2>&1; do
echo "[$(hostname)] Waiting for local Valkey to start..."
sleep 2
done
echo "[$(hostname)] Local Valkey is ready"
ORDINAL=$(hostname | rev | cut -d'-' -f1 | rev)
TOTAL_NODES=6
PRIMARIES=$(( (TOTAL_NODES + 1) / 2 ))
REPLICAS_PER_PRIMARY=$(( (TOTAL_NODES - PRIMARIES) / PRIMARIES ))
# === Only primary-0 creates the cluster ===============================
if [ "$ORDINAL" -ne 0 ]; then
echo "[$(hostname)] Not primary-0 (ordinal $ORDINAL). Skipping cluster creation."
exit 0
fi
# === Wait for ALL nodes to be reachable ================================
echo "[$(hostname)] Waiting for all $TOTAL_NODES nodes to be reachable..."
for i in $(seq 0 $((TOTAL_NODES - 1))); do
HOST="valkey-${i}.valkey.distgit.svc.cluster.local"
until valkey-cli -h "$HOST" -p 6379 -a "${VALKEY_PASSWORD}" ping >/dev/null 2>&1; do
echo " → Waiting for $HOST..."
sleep 3
done
echo " ✓ $HOST is reachable"
done
# === Check if cluster is already healthy ===============================
if valkey-cli -a "${VALKEY_PASSWORD}" cluster info 2>/dev/null | grep -q "cluster_known_nodes:$TOTAL_NODES"; then
if valkey-cli -a "${VALKEY_PASSWORD}" cluster info | grep -q "cluster_state:ok"; then
echo "[$(hostname)] Cluster already healthy with $TOTAL_NODES nodes"
exit 0
fi
fi
# === Build node list ===================================================
NODES=""
for i in $(seq 0 $((TOTAL_NODES - 1))); do
HOST="valkey-${i}.valkey.distgit.svc.cluster.local"
NODES="$NODES $HOST:6379"
done
echo "[$(hostname)] Creating cluster:"
echo " Primaries: $PRIMARIES"
echo " Replicas per primary: $REPLICAS_PER_PRIMARY"
echo " Nodes: $NODES"
# === Retry cluster creation up to 5 times ==============================
for attempt in $(seq 1 5); do
echo "[$(hostname)] Attempt $attempt to create cluster..."
if valkey-cli -a "${VALKEY_PASSWORD}" \
--cluster create $NODES \
--cluster-replicas $REPLICAS_PER_PRIMARY \
--cluster-yes; then
echo "[$(hostname)] Cluster created successfully"
break
else
echo "[$(hostname)] Failed. Retrying in 10s..."
sleep 10
fi
[ $attempt -eq 5 ] && echo "[$(hostname)] All attempts failed" && exit 1
done
# === Final health check ================================================
sleep 5
if valkey-cli -a "${VALKEY_PASSWORD}" cluster info | grep -q "cluster_state:ok"; then
echo "[$(hostname)] CLUSTER IS HEALTHY — ALL 16384 SLOTS COVERED"
else
echo "[$(hostname)] ERROR: Cluster not OK"
valkey-cli -a "${VALKEY_PASSWORD}" cluster nodes
exit 1
fi
# === NON-PRIMARY NODES: Join the cluster ===============================
if [ "$ORDINAL" -ge "$PRIMARIES" ]; then
# Replica N joins primary (N - PRIMARIES)
PRIMARY_IDX=$(( ORDINAL - PRIMARIES ))
PRIMARY_HOST="valkey-${PRIMARY_IDX}.valkey.distgit.svc.cluster.local"
echo "[$(hostname)] Replica joining primary $PRIMARY_IDX ($PRIMARY_HOST)"
until valkey-cli -h "${PRIMARY_HOST}" -p 6379 -a "${VALKEY_PASSWORD}" ping >/dev/null 2>&1; do
sleep 5
done
valkey-cli -a "${VALKEY_PASSWORD}" \
--cluster add-node "${POD_IP}:6379" "${PRIMARY_HOST}:6379" --cluster-slave
elif [ "$ORDINAL" -gt 0 ] && [ "$ORDINAL" -lt "$PRIMARIES" ]; then
# Additional primary joins via primary-0
echo "[$(hostname)] Primary joining via valkey-0"
until valkey-cli -h valkey-0.valkey.distgit.svc.cluster.local \
-p 6379 -a "${VALKEY_PASSWORD}" ping >/dev/null 2>&1; do
sleep 5
done
valkey-cli -a "${VALKEY_PASSWORD}" \
--cluster add-node "${POD_IP}:6379" valkey-0.valkey.distgit.svc.cluster.local:6379
fi

View file

@ -0,0 +1,8 @@
apiVersion: v1
kind: Secret
metadata:
name: valkey-auth
namespace: distgit
type: Opaque
stringData:
password: "{{ (env == 'production') | ternary(distgit_valkey_password, distgit_stg_valkey_password) }}"

View file

@ -0,0 +1,15 @@
---
apiVersion: v1
kind: Service
metadata:
name: valkey
namespace: distgit
spec:
clusterIP: None
selector:
app: valkey
ports:
- name: client
port: 6379
- name: cluster-bus
port: 16379

View file

@ -0,0 +1,104 @@
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: valkey
namespace: distgit
spec:
serviceName: valkey
replicas: 6
podManagementPolicy: Parallel
selector:
matchLabels:
app: valkey
template:
metadata:
labels:
app: valkey
spec:
initContainers:
- name: init-config
image: busybox:1.36
command: ["/scripts/init-config.sh"]
env:
- name: POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: REPLICAS
value: "6"
- name: VALKEY_PASSWORD
valueFrom:
secretKeyRef:
name: valkey-auth
key: password
volumeMounts:
- name: config
mountPath: /etc/valkey
readOnly: true
- name: scripts
mountPath: /scripts
- name: workdir
mountPath: /config
- name: data
mountPath: /data
containers:
- name: valkey
image: valkey/valkey:7.2.5
command: ["/bin/sh", "-c"]
args:
- |
/scripts/init-cluster.sh &
exec valkey-server /config/valkey.conf
env:
- name: POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: REPLICAS
value: "6"
- name: HOSTNAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: VALKEY_PASSWORD
valueFrom:
secretKeyRef:
name: valkey-auth
key: password
ports:
- containerPort: 6379
name: client
- containerPort: 16379
name: cluster-bus
volumeMounts:
- name: data
mountPath: /data
- name: workdir
mountPath: /config
- name: scripts
mountPath: /scripts
readinessProbe:
exec:
command: ["valkey-cli", "-a", "x", "ping"]
initialDelaySeconds: 5
periodSeconds: 10
volumes:
- name: config
configMap:
name: valkey
- name: scripts
configMap:
name: valkey
defaultMode: 0755
- name: workdir
emptyDir: {}
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: ["ReadWriteOnce"]
storageClassName: ocs-storagecluster-ceph-rbd
resources:
requests:
storage: 10Gi

View file

@ -0,0 +1,866 @@
# Default values for gitea.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.
## @section Global
#
## @param global.imageRegistry global image registry override
## @param global.imagePullSecrets global image pull secrets override; can be extended by `imagePullSecrets`
## @param global.storageClass global storage class override
## @param global.hostAliases global hostAliases which will be added to the pod's hosts files
global:
imageRegistry: ''
## E.g.
## imagePullSecrets:
## - myRegistryKeySecretName
##
imagePullSecrets: []
storageClass: ''
hostAliases: []
# - ip: 192.168.137.2
# hostnames:
# - example.com
## @param namespaceOverride String to fully override common.names.namespace
##
namespaceOverride: ''
## @param replicaCount number of replicas for the deployment
replicaCount: 1
## @section strategy
## @param strategy.type strategy type
## @param strategy.rollingUpdate.maxSurge maxSurge
## @param strategy.rollingUpdate.maxUnavailable maxUnavailable
strategy:
type: 'RollingUpdate'
rollingUpdate:
maxSurge: 0
maxUnavailable: 1
## @param clusterDomain cluster domain
clusterDomain: cluster.local
## @section Image
## @param image.registry image registry, e.g. gcr.io,docker.io
## @param image.repository Image to start for this pod
## @param image.tag Visit: [Image tag](https://code.forgejo.org/forgejo/-/packages/container/forgejo/versions). Defaults to `appVersion` within Chart.yaml.
## @param image.digest Image digest. Allows to pin the given image tag. Useful for having control over mutable tags like `latest`
## @param image.pullPolicy Image pull policy
## @param image.rootless Wether or not to pull the rootless version of Forgejo
## @param image.fullOverride Completely overrides the image registry, path/image, tag and digest. **Adjust `image.rootless` accordingly and review [Rootless defaults](#rootless-defaults).**
image:
registry: quay.io
repository: "{{ (env == 'production') | ternary(distgit_prod_quay_image, distgit_stg_quay_image) }}"
# Overrides the image tag whose default is the chart appVersion.
tag: "{{ (env == 'production') | ternary(distgit_prod_quay_image_tag, distgit_stg_quay_image_tag) }}"
digest: ''
pullPolicy: IfNotPresent
rootless: true
fullOverride: ''
## @param imagePullSecrets Secret to use for pulling the image
imagePullSecrets: []
## @section Security
# Security context is only usable with rootless image due to image design
## @param podSecurityContext.fsGroup Set the shared file system group for all containers in the pod.
podSecurityContext:
fsGroup: 1000
## @param containerSecurityContext Security context
containerSecurityContext: {}
# allowPrivilegeEscalation: false
# capabilities:
# drop:
# - ALL
# # Add the SYS_CHROOT capability for root and rootless images if you intend to
# # run pods on nodes that use the container runtime cri-o. Otherwise, you will
# # get an error message from the SSH server that it is not possible to read from
# # the repository.
# # https://gitea.com/gitea/helm-chart/issues/161
# add:
# - SYS_CHROOT
# privileged: false
# readOnlyRootFilesystem: true
# runAsGroup: 1000
# runAsNonRoot: true
# runAsUser: 1000
## @deprecated The securityContext variable has been split two:
## - containerSecurityContext
## - podSecurityContext.
## @param securityContext Run init and Forgejo containers as a specific securityContext
securityContext: {}
## @param podDisruptionBudget Pod disruption budget
podDisruptionBudget: {}
# maxUnavailable: 1
# minAvailable: 1
## @section Service
service:
## @param service.http.type Kubernetes service type for web traffic
## @param service.http.port Port number for web traffic
## @param service.http.clusterIP ClusterIP setting for http autosetup for deployment
## @param service.http.loadBalancerIP LoadBalancer IP setting
## @param service.http.nodePort NodePort for http service
## @param service.http.externalTrafficPolicy If `service.http.type` is `NodePort` or `LoadBalancer`, set this to `Local` to enable source IP preservation
## @param service.http.externalIPs External IPs for service
## @param service.http.ipFamilyPolicy HTTP service dual-stack policy
## @param service.http.ipFamilies HTTP service dual-stack familiy selection,for dual-stack parameters see official kubernetes [dual-stack concept documentation](https://kubernetes.io/docs/concepts/services-networking/dual-stack/).
## @param service.http.loadBalancerSourceRanges Source range filter for http loadbalancer
## @param service.http.annotations HTTP service annotations
## @param service.http.labels HTTP service additional labels
## @param service.http.loadBalancerClass Loadbalancer class
http:
type: ClusterIP
port: 3000
clusterIP:
loadBalancerIP:
nodePort:
externalTrafficPolicy:
externalIPs:
ipFamilyPolicy:
ipFamilies:
loadBalancerSourceRanges: []
annotations: {}
labels: {}
loadBalancerClass:
## @param service.ssh.type Kubernetes service type for ssh traffic
## @param service.ssh.port Port number for ssh traffic
## @param service.ssh.clusterIP ClusterIP setting for ssh autosetup for deployment
## @param service.ssh.loadBalancerIP LoadBalancer IP setting
## @param service.ssh.nodePort NodePort for ssh service
## @param service.ssh.externalTrafficPolicy If `service.ssh.type` is `NodePort` or `LoadBalancer`, set this to `Local` to enable source IP preservation
## @param service.ssh.externalIPs External IPs for service
## @param service.ssh.ipFamilyPolicy SSH service dual-stack policy
## @param service.ssh.ipFamilies SSH service dual-stack familiy selection,for dual-stack parameters see official kubernetes [dual-stack concept documentation](https://kubernetes.io/docs/concepts/services-networking/dual-stack/).
## @param service.ssh.hostPort HostPort for ssh service
## @param service.ssh.loadBalancerSourceRanges Source range filter for ssh loadbalancer
## @param service.ssh.annotations SSH service annotations
## @param service.ssh.labels SSH service additional labels
## @param service.ssh.loadBalancerClass Loadbalancer class
ssh:
type: ClusterIP
port: 22
clusterIP:
loadBalancerIP:
nodePort:
externalTrafficPolicy:
externalIPs:
ipFamilyPolicy:
ipFamilies:
hostPort:
loadBalancerSourceRanges: []
annotations: {}
labels: {}
loadBalancerClass:
## @section Ingress
## @param ingress.enabled Enable ingress
## @param ingress.className Ingress class name
## @param ingress.annotations Ingress annotations
## @param ingress.hosts[0].host Default Ingress host
## @param ingress.hosts[0].paths[0].path Default Ingress path
## @param ingress.hosts[0].paths[0].pathType Ingress path type
## @param ingress.tls Ingress tls settings
ingress:
enabled: false
# className: nginx
className:
annotations:
{}
# kubernetes.io/ingress.class: nginx
# kubernetes.io/tls-acme: "true"
hosts:
- host: git.example.com
paths:
- path: /
pathType: Prefix
tls: []
# - secretName: chart-example-tls
# hosts:
# - git.example.com
## @section Route
## @param route.enabled Enable route
## @param route.annotations Route annotations
## @param route.host Host to use for the route (will be assigned automatically by OKD / OpenShift is not defined)
## @param route.wildcardPolicy Wildcard policy if any for the route, currently only 'Subdomain' or 'None' is allowed.
## @param route.tls.termination termination type (see [OKD documentation](https://docs.okd.io/latest/rest_api/network_apis/route-route-openshift-io-v1.html#spec-tls))
## @param route.tls.insecureEdgeTerminationPolicy the desired behavior for insecure connections to a route (e.g. with http)
## @param route.tls.existingSecret the name of a predefined secret of type kubernetes.io/tls with both key (tls.crt and tls.key) set accordingly (if defined attributes 'certificate', 'caCertificate' and 'privateKey' are ignored)
## @param route.tls.certificate PEM encoded single certificate
## @param route.tls.privateKey PEM encoded private key
## @param route.tls.caCertificate PEM encoded CA certificate or chain that issued the certificate
## @param route.tls.destinationCACertificate PEM encoded CA certificate used to verify the authenticity of final end point when 'termination' is set to 'passthrough' (ignored otherwise)
route:
enabled: true
annotations: {}
host: "{{ (env == 'production') | ternary(distgit_hostname, distgit_stg_hostname) }}"
wildcardPolicy:
tls:
termination: edge
insecureEdgeTerminationPolicy: Redirect
existingSecret:
certificate:
# certificate: |-
# -----BEGIN CERTIFICATE-----
# ...
# -----END CERTIFICATE-----
privateKey:
# privateKey: |-
# -----BEGIN PRIVATE KEY-----
# ...
# -----END PRIVATE KEY-----
caCertificate:
# caCertificate: |-
# -----BEGIN CERTIFICATE-----
# ...
# -----END CERTIFICATE-----
destinationCACertificate:
# destinationCACertificate: |-
# -----BEGIN CERTIFICATE-----
# ...
# -----END CERTIFICATE-----
## @section deployment
#
## @param resources Kubernetes resources
resources:
{}
# We usually recommend not to specify default resources and to leave this as a conscious
# choice for the user. This also increases chances charts run on environments with little
# resources, such as Minikube. If you do want to specify resources, uncomment the following
# lines, adjust them as necessary, and remove the curly braces after 'resources:'.
# limits:
# cpu: 100m
# memory: 128Mi
# requests:
# cpu: 100m
# memory: 128Mi
## Use an alternate scheduler, e.g. "stork".
## ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/
##
## @param schedulerName Use an alternate scheduler, e.g. "stork"
schedulerName: ''
## @param nodeSelector NodeSelector for the deployment
nodeSelector: {}
## @param tolerations Tolerations for the deployment
tolerations: []
## @param affinity Affinity for the deployment
affinity: {}
## @param topologySpreadConstraints TopologySpreadConstraints for the deployment
topologySpreadConstraints: []
## @param dnsConfig dnsConfig for the deployment
dnsConfig: {}
## @param priorityClassName priorityClassName for the deployment
priorityClassName: ''
## @param deployment.env Additional environment variables to pass to containers
## @param deployment.terminationGracePeriodSeconds How long to wait until forcefully kill the pod
## @param deployment.labels Labels for the deployment
## @param deployment.annotations Annotations for the Forgejo deployment to be created
deployment:
env:
[]
# - name: VARIABLE
# value: my-value
terminationGracePeriodSeconds: 60
labels: {}
annotations: {}
## @section ServiceAccount
## @param serviceAccount.create Enable the creation of a ServiceAccount
## @param serviceAccount.name Name of the created ServiceAccount, defaults to release name. Can also link to an externally provided ServiceAccount that should be used.
## @param serviceAccount.automountServiceAccountToken Enable/disable auto mounting of the service account token
## @param serviceAccount.imagePullSecrets Image pull secrets, available to the ServiceAccount
## @param serviceAccount.annotations Custom annotations for the ServiceAccount
## @param serviceAccount.labels Custom labels for the ServiceAccount
serviceAccount:
create: true
name: 'forgejo-http'
automountServiceAccountToken: false
imagePullSecrets: []
# - name: private-registry-access
annotations: {}
labels: {}
## @section Persistence
#
## @param persistence.enabled Enable persistent storage
## @param persistence.create Whether to create the persistentVolumeClaim for shared storage
## @param persistence.mount Whether the persistentVolumeClaim should be mounted (even if not created)
## @param persistence.claimName Use an existing claim to store repository information
## @param persistence.size Size for persistence to store repo information
## @param persistence.accessModes AccessMode for persistence
## @param persistence.labels Labels for the persistence volume claim to be created
## @param persistence.annotations.helm.sh/resource-policy Resource policy for the persistence volume claim
## @param persistence.storageClass Name of the storage class to use
## @param persistence.subPath Subdirectory of the volume to mount at
## @param persistence.volumeName Name of persistent volume in PVC
persistence:
enabled: true
create: false
mount: true
claimName: gitea-shared-storage
size: 100Gi
accessModes:
- ReadWriteOnce
labels: {}
storageClass:
subPath:
volumeName: ''
annotations:
helm.sh/resource-policy: keep
## @param extraVolumes Additional volumes to mount to the Forgejo deployment
extraVolumes: []
# - name: postgres-ssl-vol
# secret:
# secretName: gitea-postgres-ssl
## @param extraContainerVolumeMounts Mounts that are only mapped into the Forgejo runtime/main container, to e.g. override custom templates.
extraContainerVolumeMounts: []
## @param extraInitVolumeMounts Mounts that are only mapped into the init-containers. Can be used for additional preconfiguration.
extraInitVolumeMounts: []
## @deprecated The extraVolumeMounts variable has been split two:
## - extraContainerVolumeMounts
## - extraInitVolumeMounts
## As an example, can be used to mount a client cert when connecting to an external Postgres server.
## @param extraVolumeMounts **DEPRECATED** Additional volume mounts for init containers and the Forgejo main container
extraVolumeMounts: []
# - name: postgres-ssl-vol
# readOnly: true
# mountPath: "/pg-ssl"
## @section Init
## @param initPreScript Bash shell script copied verbatim to the start of the init-container.
initPreScript: ''
#
# initPreScript: |
# mkdir -p /data/git/.postgresql
# cp /pg-ssl/* /data/git/.postgresql/
# chown -R git:git /data/git/.postgresql/
# chmod 400 /data/git/.postgresql/postgresql.key
## @param initContainers.resources.limits initContainers.limits Kubernetes resource limits for init containers
## @param initContainers.resources.requests.cpu initContainers.requests.cpu Kubernetes cpu resource limits for init containers
## @param initContainers.resources.requests.memory initContainers.requests.memory Kubernetes memory resource limits for init containers
initContainers:
resources:
limits: {}
requests:
cpu: 100m
memory: 128Mi
# Configure commit/action signing prerequisites
## @section Signing
#
## @param signing.enabled Enable commit/action signing
## @param signing.gpgHome GPG home directory
## @param signing.privateKey Inline private GPG key for signed internal Git activity
## @param signing.existingSecret Use an existing secret to store the value of `signing.privateKey`
signing:
enabled: false
gpgHome: /data/git/.gnupg
privateKey: ''
# privateKey: |-
# -----BEGIN PGP PRIVATE KEY BLOCK-----
# ...
# -----END PGP PRIVATE KEY BLOCK-----
existingSecret: ''
## @section Gitea
#
gitea:
## @param gitea.admin.username Username for the Forgejo admin user
## @param gitea.admin.existingSecret Use an existing secret to store admin user credentials
## @param gitea.admin.password Password for the Forgejo admin user
## @param gitea.admin.email Email for the Forgejo admin user
## @param gitea.admin.passwordMode Mode for how to set/update the admin user password. Options are: initialOnlyNoReset, initialOnlyRequireReset, and keepUpdated
admin:
# existingSecret: gitea-admin-secret
existingSecret:
username: "{{ (env == 'production') | ternary(distgit_admin_username, distgit_stg_admin_username) }}"
password: "{{ (env == 'production') | ternary(distgit_admin_password, distgit_stg_admin_password) }}"
email: 'gitea@local.domain'
passwordMode: keepUpdated
## @param gitea.metrics.enabled Enable Forgejo metrics
## @param gitea.metrics.serviceMonitor.enabled Enable Forgejo metrics service monitor
## @param gitea.metrics.serviceMonitor.namespace Namespace in which Prometheus is running
metrics:
enabled: false
serviceMonitor:
enabled: false
namespace: ''
# additionalLabels:
# prometheus-release: prom1
## @param gitea.ldap LDAP configuration
ldap:
[]
# - name: "LDAP 1"
# existingSecret:
# securityProtocol:
# host:
# port:
# userSearchBase:
# userFilter:
# adminFilter:
# emailAttribute:
# bindDn:
# bindPassword:
# usernameAttribute:
# publicSSHKeyAttribute:
# Either specify inline `key` and `secret` or refer to them via `existingSecret`
## @param gitea.oauth OAuth configuration
oauth:
- name: "Fedora Accounts"
provider: "openidConnect"
key: "{{ (env == 'production') | ternary(distgit_oidc_key, distgit_stg_oidc_key) }}"
secret: "{{ (env == 'production') | ternary(distgit_oidc_secret, distgit_stg_oidc_secret) }}"
autoDiscoverUrl: "{{ (env == 'production') | ternary(distgit_oidc_autodiscoverurl, distgit_stg_oidc_autodiscoverurl) }}"
icon-url: "/assets/img/logo.svg"
group-claim-name: "groups"
admin-group: "sysadmin-forge"
group-team-map-removal: true
group-team-map: '{"forge-cle-members":{"cle":["Members"]},"forge-cle-owners":{"cle":["Owners"]},"forge-releng-members":{"releng":["Members"]},"forge-releng-owners":{"releng":["Owners"]},"forge-apps-members":{"apps":["Members"]},"forge-apps-owners":{"apps":["Owners"]},"forge-epel-members":{"epel":["Members"]},"forge-epel-owners":{"epel":["Owners"]},"forge-atomic-desktops-members":{"atomic-desktops":["Members"]},"forge-atomic-desktops-owners":{"atomic-desktops":["Owners"]},"forge-council-owners":{"council":["Owners"]},"council":{"council":["Members"]},"forge-server-owners":{"server":["Owners"]},"server-wg":{"server":["Members"]},"forge-docs-owners":{"docs":["Owners"]},"forge-docs-members":{"docs":["Members"]},"forge-forge-owners":{"forge":["Owners"]},"forge-forge-members":{"forge":["Members"]},"forge-commops-owners":{"commops":["Owners"]},"forge-commops-members":{"commops":["Members"]},"forge-cloud-owners":{"cloud":["Owners"]},"forge-cloud-members":{"cloud":["Members"]},"forge-ai-ml-owners":{"ai-ml":["Owners"]},"forge-ai-ml-members":{"ai-ml":["Members"]},"qa-tools-sig":{"quality":["Members"]},"qa-admin":{"quality":["Owners"]},"forge-riscv-owners":{"riscv":["Owners"]},"forge-riscv-members":{"riscv":["Members"]},"forge-reproduciblebuilds-owners":{"reproduciblebuilds":["Owners"]},"forge-dei-owners":{"dei":["Owners"]},"forge-dei-members":{"dei":["Members"]},"forge-rust-owners":{"rust":["Owners"]},"forge-rust-members":{"rust":["Members"]},"forge-mobility-owners":{"mobility":["Owners"]},"forge-mobility-members":{"mobility":["Members"]},"forge-mobility-remix":{"mobility":["Remix"]},"forge-mobility-pocketblue":{"mobility":["Pocketblue"]},"forge-ci-owners":{"ci":["Owners"]}}'
# - name: 'OAuth 1'
# provider:
# key:
# secret:
# existingSecret:
# autoDiscoverUrl:
# useCustomUrls:
# customAuthUrl:
# customTokenUrl:
# customProfileUrl:
# customEmailUrl:
## @param gitea.additionalConfigSources Additional configuration from secret or configmap
additionalConfigSources: []
# - secret:
# secretName: gitea-app-ini-oauth
# - configMap:
# name: gitea-app-ini-plaintext
## @param gitea.additionalConfigFromEnvs Additional configuration sources from environment variables
additionalConfigFromEnvs: []
## @param gitea.podAnnotations Annotations for the Forgejo pod
podAnnotations: {}
## @param gitea.ssh.logLevel Configure OpenSSH's log level. Only available for root-based Forgejo image.
ssh:
logLevel: 'INFO'
## @section `app.ini` overrides
## @descriptionStart
## Every value described in the [Cheat
## Sheet](https://forgejo.org/docs/latest/admin/config-cheat-sheet/) can be
## set as a Helm value. Configuration sections map to (lowercased) YAML
## blocks, while the keys themselves remain in all caps.
## @descriptionEnd
config:
# values in the DEFAULT section
# (https://forgejo.org/docs/latest/admin/config-cheat-sheet/#overall-default)
# are un-namespaced
## @param gitea.config.APP_NAME Application name, used in the page title
APP_NAME: 'Fedora Forge'
## @param gitea.config.RUN_MODE Application run mode, affects performance and debugging: `dev` or `prod`
RUN_MODE: prod
## @param gitea.config.repository General repository settings
repository:
MAX_CREATION_LIMIT: 0
ALLOW_FORK_WITHOUT_MAXIMUM_LIMIT: true
## @param gitea.config.cors Cross-origin resource sharing settings
cors: {}
## @param gitea.config.ui User interface settings
ui:
ONLY_SHOW_RELEVANT_REPOS: true
DEFAULT_THEME: "fedora-auto"
THEMES: "fedora-auto,fedora-light,fedora-dark"
## @param gitea.config.markdown Markdown parser settings
markdown: {}
## @param gitea.config.server [object] General server settings
server:
SSH_PORT: 22 # rootful image
SSH_LISTEN_PORT: 2222 # rootless image
HTTP_PORT: 3000
PROTOCOL: "http"
LFS_JWT_SECRET: "{{ (env == 'production') | ternary(distgit_jwt_secret, distgit_stg_jwt_secret) }}"
SSH_DOMAIN: "{{ (env == 'production') | ternary(distgit_hostname, distgit_stg_hostname) }}"
DOMAIN: "{{ (env == 'production') | ternary(distgit_hostname, distgit_stg_hostname) }}"
ROOT_URL: "https://{{ (env == 'production') | ternary(distgit_hostname, distgit_stg_hostname) }}/"
APP_DATA_PATH: "/data"
ENABLE_PPROF: false
START_SSH_SERVER: true
OFFLINE_MODE: false
DISABLE_SSH: true
LANDING_PAGE: organizations
## @param gitea.config.database Database configuration (only necessary with an [externally managed DB](https://code.forgejo.org/forgejo-helm/forgejo-helm#external-database)).
database:
HOST: "{{ distgit_database_host }}"
NAME: "{{ distgit_database_name }}"
USER: "{{ distgit_database_user }}"
PASSWD: "{{ distgit_database_password }}"
SCHEMA: "{{ distgit_database_schema }}"
SSL_MODE: "require"
DB_TYPE: "postgres"
## @param gitea.config.indexer Settings for what content is indexed and how
indexer: {}
## @param gitea.config.queue Job queue configuration
queue: {}
## @param gitea.config.admin Admin user settings
admin:
DISABLE_REGULAR_ORG_CREATION: true
USER_DISABLED_FEATURES: "deletion"
EXTERNAL_USER_DISABLE_FEATURES: "deletion"
DEFAULT_EMAIL_NOTIFICATIONS: "disabled"
## @param gitea.config.security Site security settings
security: {}
## @param gitea.config.camo Settings for the [camo](https://github.com/cactus/go-camo) media proxy server (disabled by default)
camo: {}
## @param gitea.config.openid Configuration for authentication with OpenID (disabled by default)
openid: {}
## @param gitea.config.oauth2_client OAuth2 client settings
oauth2_client:
OPENID_SIGNUP: true
ENABLE_AUTO_REGISTRATION: true
USERNAME: "nickname"
OPENID_CONNECT_SCOPES: "openid profile email https://id.fedoraproject.org/scope/agreements https://id.fedoraproject.org/scope/groups" # These scopes are apparently the same on staging and prod.
## @param gitea.config.service Configuration for miscellaneous Forgejo services
service:
DISABLE_REGISTRATION: true
ENABLE_BASIC_AUTHENTICATION: false
ENABLE_INTERNAL_SIGNIN: false
DEFAULT_USER_VISIBILITY: public
ALLOWED_USER_VISIBILITY_MODES: public
DEFAULT_KEEP_EMAIL_PRIVATE: true
ENABLE_NOTIFY_MAIL: true
DEFAULT_ORG_MEMBER_VISIBLE: true
## @param gitea.config.ssh.minimum_key_sizes SSH minimum key sizes
ssh.minimum_key_sizes: {}
## @param gitea.config.webhook Webhook settings
webhook: {}
## @param gitea.config.mailer Mailer configuration (disabled by default)
mailer:
ENABLED: true
FROM: fedoraforge-noreply@fedoraproject.org
PROTOCOL: smtp
SMTP_ADDR: bastion.fedoraproject.org
## @param gitea.config.email.incoming Configuration for handling incoming mail (disabled by default)
email.incoming: {}
## @param gitea.config.cache Cache configuration
cache:
TYPE: redis
CONN_STR: "redis+cluster://:{{ (env == 'production') | ternary(distgit_valkey_password, distgit_stg_valkey_password) }}@valkey-0.distgit.default.svc.cluster.local:6379,valkey-1.distgit.default.svc.cluster.local:6379,valkey-2.distgit.default.svc.cluster.local:6379,valkey-3.distgit.default.svc.cluster.local:6379,valkey-4.distgit.default.svc.cluster.local:6379,valkey-5.distgit.default.svc.cluster.local:6379/0"
## @param gitea.config.session Session/cookie handling
session: {}
## @param gitea.config.picture User avatar settings
picture:
GRAVATAR_SOURCE: libravatar
## @param gitea.config.project Project board defaults
project: {}
## @param gitea.config.attachment Issue and PR attachment configuration
attachment: {}
## @param gitea.config.log Logging configuration
log: {}
## @param gitea.config.cron Cron job configuration
cron: {}
## @param gitea.config.git Global settings for Git
git: {}
## @param gitea.config.metrics Settings for the Prometheus endpoint (disabled by default)
metrics: {}
## @param gitea.config.api Settings for the Swagger API documentation endpoints
api: {}
## @param gitea.config.oauth2 Settings for the [OAuth2 provider](https://forgejo.org/docs/latest/admin/oauth2-provider/)
oauth2: {}
## @param gitea.config.i18n Internationalization settings
i18n: {}
## @param gitea.config.markup Configuration for advanced markup processors
markup: {}
markup.asciidoc:
ENABLED: true
NEED_POSTPROCESS: true
FILE_EXTENSIONS: .adoc,.asciidoc
RENDER_COMMAND: "asciidoctor --embedded --safe-mode=secure --out-file=- -"
IS_INPUT_FILE: false
RENDER_CONTENT_MODE: sanitized
## @param gitea.config.highlight.mapping File extension to language mapping overrides for syntax highlighting
highlight.mapping: {}
## @param gitea.config.time Locale settings
time: {}
## @param gitea.config.migrations Settings for Git repository migrations
migrations:
ALLOWED_DOMAINS: "*.fedoraproject.org,pagure.io,stg.pagure.io,gitlab.com,codeberg.org,github.com,*.github.com,*.githubusercontent.com"
## @param gitea.config.federation Federation configuration
federation: {}
## @param gitea.config.packages Package registry settings
packages: {}
## @param gitea.config.mirror Configuration for repository mirroring
mirror: {}
## @param gitea.config.lfs Large File Storage configuration
lfs: {}
## @param gitea.config.repo-avatar Repository avatar storage configuration
repo-avatar: {}
## @param gitea.config.avatar User/org avatar storage configuration
avatar: {}
## @param gitea.config.storage General storage settings
storage: {}
## @param gitea.config.proxy Proxy configuration (disabled by default)
proxy: {}
## @param gitea.config.actions Configuration for [Forgejo Actions](https://forgejo.org/docs/latest/user/actions/)
actions: {}
## @param gitea.config.other Uncategorized configuration options
other: {}
nonbot:
HOMESERVER_URL: https://fedora.ems.host
ACCESS_TOKEN: "{{ (env == 'production') | ternary(distgit_nonbotkey, distgit_stg_nonbotkey) }}"
## @section LivenessProbe
#
## @param gitea.livenessProbe.enabled Enable liveness probe
## @param gitea.livenessProbe.tcpSocket.port Port to probe for liveness
## @param gitea.livenessProbe.initialDelaySeconds Initial delay before liveness probe is initiated
## @param gitea.livenessProbe.timeoutSeconds Timeout for liveness probe
## @param gitea.livenessProbe.periodSeconds Period for liveness probe
## @param gitea.livenessProbe.successThreshold Success threshold for liveness probe
## @param gitea.livenessProbe.failureThreshold Failure threshold for liveness probe
# Modify the liveness probe for your needs or completely disable it by commenting out.
livenessProbe:
enabled: true
tcpSocket:
port: http
initialDelaySeconds: 200
timeoutSeconds: 1
periodSeconds: 10
successThreshold: 1
failureThreshold: 10
## @section ReadinessProbe
#
## @param gitea.readinessProbe.enabled Enable readiness probe
## @param gitea.readinessProbe.httpGet.path Path to probe for readiness
## @param gitea.readinessProbe.httpGet.port Port to probe for readiness
## @param gitea.readinessProbe.initialDelaySeconds Initial delay before readiness probe is initiated
## @param gitea.readinessProbe.timeoutSeconds Timeout for readiness probe
## @param gitea.readinessProbe.periodSeconds Period for readiness probe
## @param gitea.readinessProbe.successThreshold Success threshold for readiness probe
## @param gitea.readinessProbe.failureThreshold Failure threshold for readiness probe
# Modify the readiness probe for your needs or completely disable it by commenting out.
readinessProbe:
enabled: true
httpGet:
path: /api/healthz
port: http
initialDelaySeconds: 5
timeoutSeconds: 1
periodSeconds: 10
successThreshold: 1
failureThreshold: 3
# # Uncomment the startup probe to enable and modify it for your needs.
## @section StartupProbe
#
## @param gitea.startupProbe.enabled Enable startup probe
## @param gitea.startupProbe.tcpSocket.port Port to probe for startup
## @param gitea.startupProbe.initialDelaySeconds Initial delay before startup probe is initiated
## @param gitea.startupProbe.timeoutSeconds Timeout for startup probe
## @param gitea.startupProbe.periodSeconds Period for startup probe
## @param gitea.startupProbe.successThreshold Success threshold for startup probe
## @param gitea.startupProbe.failureThreshold Failure threshold for startup probe
startupProbe:
enabled: false
tcpSocket:
port: http
initialDelaySeconds: 60
timeoutSeconds: 1
periodSeconds: 10
successThreshold: 1
failureThreshold: 10
## @section Redis&reg; Cluster
## @descriptionStart
## Redis&reg; Cluster is loaded as a dependency from [Bitnami](https://github.com/bitnami/charts/tree/master/bitnami/redis-cluster) if enabled in the values.
## Full configuration options are available on their website.
## Redis cluster and [Redis](#redis) cannot be enabled at the same time.
## @descriptionEnd
#
## @param redis-cluster.enabled Enable redis cluster
## @param redis-cluster.usePassword Whether to use password authentication
## @param redis-cluster.cluster.nodes Number of redis cluster master nodes
## @param redis-cluster.cluster.replicas Number of redis cluster master node replicas
redis-cluster:
enabled: true
usePassword: false
cluster:
nodes: 3 # default: 6
replicas: 0 # default: 1
## @section Redis&reg;
## @descriptionStart
## Redis&reg; is loaded as a dependency from [Bitnami](https://github.com/bitnami/charts/tree/master/bitnami/redis) if enabled in the values.
## Full configuration options are available on their website.
## Redis and [Redis cluster](#redis-cluster) cannot be enabled at the same time.
## @descriptionEnd
#
## @param redis.enabled Enable redis standalone or replicated
## @param redis.architecture Whether to use standalone or replication
## @param redis.global.redis.password Required password
## @param redis.master.count Number of Redis master instances to deploy
redis:
enabled: false
architecture: standalone
global:
redis:
password: changeme
master:
count: 1
## @section PostgreSQL HA
## @descriptionStart
## PostgreSQL HA is loaded as a dependency from [Bitnami](https://github.com/bitnami/charts/tree/master/bitnami/postgresql-ha) if enabled in the values.
## Full configuration options are available on their website.
## @descriptionEnd
#
## @param postgresql-ha.enabled Enable PostgreSQL HA chart
## @param postgresql-ha.crunchydataOperator Indicate that we are using the crunchydata Operator to deploy PostgreSQL HA
## @param postgresql-ha.postgresql.password Password for the `gitea` user (overrides `auth.password`)
## @param postgresql-ha.global.postgresql.database Name for a custom database to create (overrides `auth.database`)
## @param postgresql-ha.global.postgresql.username Name for a custom user to create (overrides `auth.username`)
## @param postgresql-ha.global.postgresql.password Name for a custom password to create (overrides `auth.password`)
## @param postgresql-ha.postgresql.repmgrPassword Repmgr Password
## @param postgresql-ha.postgresql.postgresPassword postgres Password
## @param postgresql-ha.pgpool.adminPassword pgpool adminPassword
## @param postgresql-ha.service.ports.postgresql PostgreSQL service port (overrides `service.ports.postgresql`)
## @param postgresql-ha.primary.persistence.size PVC Storage Request for PostgreSQL HA volume
postgresql-ha:
global:
postgresql:
database: gitea
password: gitea
username: gitea
enabled: false
crunchydataOperator: true
postgresql:
repmgrPassword: changeme2
postgresPassword: changeme1
password: changeme4
pgpool:
adminPassword: changeme3
service:
ports:
postgresql: 5432
primary:
persistence:
size: 10Gi
## @section PostgreSQL
## @descriptionStart
## PostgreSQL is loaded as a dependency from [Bitnami](https://github.com/bitnami/charts/tree/master/bitnami/postgresql) if enabled in the values.
## Full configuration options are available on their website.
## @descriptionEnd
#
## @param postgresql.enabled Enable PostgreSQL
## @param postgresql.global.postgresql.auth.password Password for the `gitea` user (overrides `auth.password`)
## @param postgresql.global.postgresql.auth.database Name for a custom database to create (overrides `auth.database`)
## @param postgresql.global.postgresql.auth.username Name for a custom user to create (overrides `auth.username`)
## @param postgresql.global.postgresql.service.ports.postgresql PostgreSQL service port (overrides `service.ports.postgresql`)
## @param postgresql.primary.persistence.size PVC Storage Request for PostgreSQL volume
postgresql:
enabled: false
global:
postgresql:
auth:
password: gitea
database: gitea
username: gitea
service:
ports:
postgresql: 5432
primary:
persistence:
size: 10Gi
# By default, removed or moved settings that still remain in a user defined values.yaml will cause Helm to fail running the install/update.
# Set it to false to skip this basic validation check.
## @section Advanced
## @param checkDeprecation Whether to run this basic validation check.
## @param test.enabled Whether to use test-connection Pod.
## @param test.image.name Image name for the wget container used in the test-connection Pod.
## @param test.image.tag Image tag for the wget container used in the test-connection Pod.
checkDeprecation: true
test:
enabled: true
image:
name: busybox
tag: latest
## @param extraDeploy Array of extra objects to deploy with the release.
##
extraDeploy: []

View file

@ -0,0 +1,2 @@
---
openshift_user_id: 1001150000