forked from infra/ansible
forgejo: wip distgit role
Signed-off-by: David Kirwan <davidkirwanirl@gmail.com>
This commit is contained in:
parent
8f4e37a1f6
commit
185e0c81ed
27 changed files with 2241 additions and 0 deletions
4
roles/openshift-apps/dist-git/default/main.yml
Normal file
4
roles/openshift-apps/dist-git/default/main.yml
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
---
|
||||
forgejo_namespace: "forgejo"
|
||||
forgejo_project_description: "Forgejo Gitforge"
|
||||
forgejo_application_name: "{{ forgejo_namespace }}"
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
@import "theme-fedora-light.css";
|
||||
@import "theme-fedora-dark.css" (prefers-color-scheme: dark);
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
28
roles/openshift-apps/dist-git/tasks/call-helm.yaml
Normal file
28
roles/openshift-apps/dist-git/tasks/call-helm.yaml
Normal 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"
|
||||
|
|
@ -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
|
||||
#
|
||||
|
|
@ -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"
|
||||
|
|
@ -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"
|
||||
22
roles/openshift-apps/dist-git/tasks/create-forgejo-pvc.yaml
Normal file
22
roles/openshift-apps/dist-git/tasks/create-forgejo-pvc.yaml
Normal 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"
|
||||
|
|
@ -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"
|
||||
|
|
@ -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
|
||||
75
roles/openshift-apps/dist-git/tasks/deploy-valkey.yaml
Normal file
75
roles/openshift-apps/dist-git/tasks/deploy-valkey.yaml
Normal 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
|
||||
|
||||
14
roles/openshift-apps/dist-git/tasks/main.yaml
Normal file
14
roles/openshift-apps/dist-git/tasks/main.yaml
Normal 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
|
||||
|
|
@ -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) }}
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: "distgit"
|
||||
15
roles/openshift-apps/dist-git/templates/distgit-pv.yaml.j2
Normal file
15
roles/openshift-apps/dist-git/templates/distgit-pv.yaml.j2
Normal 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
|
||||
25
roles/openshift-apps/dist-git/templates/distgit-pvc.yaml.j2
Normal file
25
roles/openshift-apps/dist-git/templates/distgit-pvc.yaml.j2
Normal 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
|
||||
|
|
@ -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
|
||||
|
|
@ -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) }}
|
||||
|
|
@ -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
|
||||
|
||||
|
|
@ -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) }}"
|
||||
129
roles/openshift-apps/dist-git/templates/valkey-configmap.yaml.j2
Normal file
129
roles/openshift-apps/dist-git/templates/valkey-configmap.yaml.j2
Normal 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
|
||||
|
|
@ -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) }}"
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
866
roles/openshift-apps/dist-git/templates/values.yaml.j2
Normal file
866
roles/openshift-apps/dist-git/templates/values.yaml.j2
Normal 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® Cluster
|
||||
## @descriptionStart
|
||||
## Redis® 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®
|
||||
## @descriptionStart
|
||||
## Redis® 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: []
|
||||
2
roles/openshift-apps/dist-git/vars/main.yml
Normal file
2
roles/openshift-apps/dist-git/vars/main.yml
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
---
|
||||
openshift_user_id: 1001150000
|
||||
Loading…
Add table
Add a link
Reference in a new issue