├── .dockerignore ├── .eslintrc.json ├── .github └── workflows │ ├── deploy.yml │ └── pr-check.yml ├── .gitignore ├── .prettierrc ├── Containerfile ├── LICENSE.md ├── LICENSES ├── APACHE-2.0.txt └── CC-BY-4.0.txt ├── README.md ├── content ├── blog │ ├── 1.0-announcement │ │ ├── images │ │ │ └── GitOps-1.0.jpg │ │ └── index.mdx │ ├── cdcon+gitopscon-at-open-source-summit │ │ ├── images │ │ │ └── gitopscon-opengitops-blog-banner.png │ │ └── index.mdx │ ├── flux-cncf-graduation │ │ ├── images │ │ │ └── flux-cncf-graduation.png │ │ └── index.mdx │ ├── gitops-days-2022 │ │ ├── images │ │ │ └── gitops-days-2022-recap.png │ │ └── index.mdx │ ├── gitops-schedule-kubecon-eu-2023 │ │ ├── index.mdx │ │ └── kubecon-europe-2023-1.png │ ├── gitops-schedule-kubecon-na-2024 │ │ ├── index.mdx │ │ └── kubecon_saltlake.jpeg │ ├── gitopscon-eu-2023 │ │ ├── images │ │ │ └── GitOpsCon-NA-2023-image.png │ │ └── index.mdx │ ├── gitopscon-na-2021 │ │ ├── images │ │ │ └── goc-na-2021.jpg │ │ └── index.mdx │ └── sec-gitops │ │ ├── images │ │ └── GitOps-1.0.jpg │ │ └── index.mdx ├── events │ ├── 20220216-gitops-eks-anywhere-flux.mdx │ ├── 20220217-gitops-for-helm-users.mdx │ ├── 20220224_cncf_get-started-gitops-flux.mdx │ ├── 20220224_gitops-with-github-and-flux.mdx │ ├── 20220302_managing-thousands-clusters-flux.mdx │ ├── 20220331-gitops-for-helm-users.mdx │ ├── 202203_flux-for-helm-users.mdx │ ├── 20220915-cncf-odw-Flux-OCI │ ├── 20220929-cncf-odw-how-to-gitops-your-terraform │ ├── argocon-2022.mdx │ ├── argocon-eu-2023.mdx │ ├── argocon-eu-2024.mdx │ ├── argocon-eu-2025.mdx │ ├── argocon-na-2023.mdx │ ├── argocon-na-2024.mdx │ ├── argocon-na-2025.mdx │ ├── fluxcon-na-2025.mdx │ ├── gitops-one-stop-shop.mdx │ ├── gitopscon-eu-2021.mdx │ ├── gitopscon-eu-2022.mdx │ ├── gitopscon-eu-2023-virtual.mdx │ ├── gitopscon-eu-2023.mdx │ ├── gitopscon-na-2022.mdx │ ├── gitopscon-na-2023.mdx │ ├── gitopscon-na-2024.mdx │ ├── gitopscon-na-2025.mdx │ ├── gitopscon-us-2021.mdx │ ├── gitopsdays-2022.mdx │ ├── gitopsdays-ww-2021.mdx │ └── openshift-commons-gitopsday.mdx ├── members │ ├── amazon │ │ ├── amazon.svg │ │ └── index.mdx │ ├── amestofortytwo │ │ ├── amestofortytwo.svg │ │ └── index.mdx │ ├── azure │ │ ├── azure.svg │ │ └── index.mdx │ ├── codefresh │ │ ├── codefresh.svg │ │ └── index.mdx │ ├── crayon │ │ ├── crayon.svg │ │ └── index.mdx │ ├── flanksource │ │ ├── flanksource.svg │ │ └── index.mdx │ ├── github │ │ ├── github.svg │ │ └── index.mdx │ ├── redhat │ │ ├── index.mdx │ │ └── redhat.svg │ └── weaveworks │ │ ├── index.mdx │ │ └── weaveworks.svg ├── pages │ ├── about.mdx │ └── get-involved.mdx ├── principles │ ├── 1-declarative.mdx │ ├── 2-versioned-and-immutable.mdx │ ├── 3-pulled-automatically.mdx │ └── 4-continuously-reconciled.mdx ├── testimonials │ ├── testimonial-1.mdx │ ├── testimonial-2.mdx │ └── testimonial-3.mdx └── trainings │ ├── LinuxFoundation │ ├── LFX-Gitops-certification-1.0.png │ └── LFX.mdx │ ├── akuity-gitops-intro │ ├── akuity-gitops-intro.png │ └── akuity.mdx │ ├── codefresh-gitops-at-scale │ ├── gitops-at-scale.mdx │ └── gitops-at-scale.png │ └── codefresh-gitops-fundamentals │ ├── codefresh-gitops-fundamental.png │ └── codefresh.mdx ├── gatsby-browser.js ├── gatsby-config.js ├── gatsby-node.js ├── package-lock.json ├── package.json ├── postcss.config.js ├── public └── CNAME ├── src ├── components │ ├── events.js │ ├── footer.js │ ├── header.js │ ├── layout.js │ ├── members.js │ ├── nav.js │ ├── principles.js │ ├── seo.js │ ├── testimonials.js │ └── ui │ │ ├── banner.js │ │ ├── bgCircle.js │ │ ├── bgElement.js │ │ ├── button.js │ │ ├── card-event-alt.js │ │ ├── card-event.js │ │ ├── card-member.js │ │ ├── card-post.js │ │ ├── card-testimonial.js │ │ ├── content-wrapper.js │ │ ├── external-link.js │ │ ├── grid.js │ │ ├── mdx-content.js │ │ ├── meta.js │ │ ├── nav-item.js │ │ ├── nav-toggler.js │ │ ├── principles-item.js │ │ ├── share.js │ │ ├── skip-to-content.js │ │ ├── social.js │ │ ├── stargazers.js │ │ ├── title.js │ │ └── youtube-embed.js ├── helpers │ └── index.js ├── images │ ├── icon.png │ └── thumbnail-default.png ├── pages │ ├── 404.js │ ├── about.js │ ├── blog.js │ ├── community.js │ ├── events.js │ ├── get-involved.js │ ├── index.js │ └── training.js ├── plugins │ └── tailwindcss │ │ ├── components │ │ ├── border-decor.js │ │ ├── buttons.js │ │ └── toggler.js │ │ ├── global.js │ │ ├── typography-content.js │ │ ├── typography-theme.js │ │ └── utilities.js ├── styles │ ├── app.scss │ └── mixins │ │ ├── font-face.scss │ │ └── index.scss ├── svg │ ├── calendar.svg │ ├── circle.svg │ ├── external-link.svg │ ├── github-outlined.svg │ ├── github.svg │ ├── gitops-working-group-icon.svg │ ├── icon.svg │ ├── logo.svg │ ├── logotype.svg │ ├── map.svg │ ├── pin.svg │ ├── quotes.svg │ ├── reddit.svg │ ├── slack.svg │ ├── star.svg │ └── twitter.svg └── templates │ └── blog-post.js ├── static └── fonts │ ├── avenir-500.woff │ ├── avenir-500.woff2 │ ├── montserrat-800.woff │ └── montserrat-800.woff2 ├── tailwind.config.js └── yarn.lock /.dockerignore: -------------------------------------------------------------------------------- 1 | node_modules/ -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "browser": true, 4 | "es2021": true, 5 | "amd": true, 6 | "node": true 7 | }, 8 | "extends": [ 9 | "eslint:recommended", 10 | "plugin:react/recommended" 11 | ], 12 | "parserOptions": { 13 | "ecmaFeatures": { 14 | "jsx": true 15 | }, 16 | "ecmaVersion": "latest", 17 | "sourceType": "module" 18 | }, 19 | "plugins": [ 20 | "react" 21 | ], 22 | "rules": { 23 | "react/prop-types": ["off"] 24 | }, 25 | "globals": { 26 | "__PATH_PREFIX__": "readonly" 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /.github/workflows/deploy.yml: -------------------------------------------------------------------------------- 1 | name: Deploy Gatsby 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | 8 | permissions: 9 | contents: write 10 | 11 | jobs: 12 | deploy: 13 | name: Deploy 14 | runs-on: ubuntu-24.04 15 | concurrency: 16 | group: ${{ github.workflow }}-${{ github.ref }} 17 | steps: 18 | - uses: actions/checkout@v3 19 | - name: Setup Node 20 | uses: actions/setup-node@v3 21 | with: 22 | node-version: 16 23 | - name: Cache dependencies 24 | uses: actions/cache@v3 25 | with: 26 | path: ~/.npm 27 | key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} 28 | restore-keys: | 29 | ${{ runner.os }}-node- 30 | - run: npm ci 31 | - run: npm run build 32 | - name: GitHub Pages action 33 | uses: peaceiris/actions-gh-pages@v3 34 | if: ${{ github.ref == 'refs/heads/main' }} 35 | with: 36 | github_token: ${{ secrets.GITHUB_TOKEN }} 37 | publish_dir: ./public 38 | -------------------------------------------------------------------------------- /.github/workflows/pr-check.yml: -------------------------------------------------------------------------------- 1 | name: CI Checks 2 | 3 | on: 4 | pull_request: 5 | branches: 6 | - main 7 | 8 | jobs: 9 | check: 10 | name: Pull Request Lint/Build 11 | runs-on: ubuntu-24.04 12 | steps: 13 | - uses: actions/checkout@v4 14 | - name: Setup Node 15 | uses: actions/setup-node@v4 16 | with: 17 | node-version: '14' 18 | cache: npm 19 | - name: Install Dependencies 20 | run: npm ci 21 | - name: Lint 22 | run: npm run lint 23 | - name: Build 24 | run: npm run build 25 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | .cache/ 3 | public/* 4 | !public/CNAME 5 | .DS_Store 6 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "tabWidth": 2, 3 | "semi": false, 4 | "trailingComma": "es5", 5 | "bracketSpacing": true, 6 | "jsxBracketSameLine": true, 7 | "arrowParens": "avoid", 8 | "jsxSingleQuote": false, 9 | "endOfLine": "lf", 10 | "singleQuote": false 11 | } 12 | -------------------------------------------------------------------------------- /Containerfile: -------------------------------------------------------------------------------- 1 | # Use the NODE_VERSION argument to specify the Node.js version 2 | ARG NODE_VERSION=20 3 | 4 | # Use the specified Node.js version as the base image 5 | FROM node:${NODE_VERSION}-alpine 6 | 7 | # Set Node args (do not set in node version 16 and below) 8 | ENV NODE_OPTIONS=--openssl-legacy-provider 9 | 10 | RUN apk add --update autoconf automake build-base libtool nasm pkgconf && \ 11 | rm -rf /var/cache/apk/* 12 | 13 | # Setup work directory 14 | WORKDIR /gitops-website 15 | 16 | # Set permissions for non-root user 17 | RUN chown -R node:node /gitops-website 18 | 19 | # Switch user to non-root 20 | USER node 21 | 22 | # Add repo files with correct user:group ownership 23 | ADD --chown=node:node . . 24 | 25 | # Install dependencies 26 | RUN npm ci 27 | 28 | # Expose port for server 29 | EXPOSE 8000 30 | 31 | # Create entrypoint 32 | ENTRYPOINT ["npm", "start"] -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | # License 2 | 3 | Except as otherwise noted, the content of this repo is licensed under the [Creative Commons Attribution 4.0 License](https://creativecommons.org/licenses/by/4.0/) ([local copy](LICENSES/CC-BY-4.0.txt)), and any code is licensed under the [Apache 2.0 License](http://www.apache.org/licenses/LICENSE-2.0.html) ([local copy](LICENSES/APACHE-2.0.txt)). 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # OpenGitOps Website 2 | 3 |

OpenGitOps logo icon color 4 | Globe with Meridians emoji Unicode 1F310. OpenMoji CC BY-SA 4.0

5 | 6 | Code for CNCF OpenGitOps project website. 7 | 8 | **👩‍💻 Local Development.** 9 | 10 | ```shell 11 | # if you like npm 12 | npm i 13 | npm start 14 | 15 | # Or if you like yarn 16 | yarn install 17 | yarn start 18 | ``` 19 | 20 | **Docker setup** 21 | ```shell 22 | # Build container image from local filesystem with default Node version 23 | docker build --no-cache -t website: -f Containerfile . 24 | 25 | # Build container image from local filesystem with Node version as build arg 26 | docker build --build-arg NODE_VERSION=19 --no-cache -t website: -f Containerfile . 27 | 28 | # Run container image with mapping port 80 on your computer 29 | docker run -dit -p 8000:8000 website: 30 | ``` 31 | -------------------------------------------------------------------------------- /content/blog/1.0-announcement/images/GitOps-1.0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/open-gitops/website/4c355f478ae2b5d7e8b5fc62a6c50d44e3e28f7f/content/blog/1.0-announcement/images/GitOps-1.0.jpg -------------------------------------------------------------------------------- /content/blog/1.0-announcement/index.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: OpenGitOps 1.0 is finally here and why you should care 3 | date: "2021-11-08T09:00:01.284Z" 4 | description: "OpenGitOps 1.0 brings a mature standard to the DevOps industry." 5 | author: Dan Garfield and Scott Rigby 6 | thumbnail: images/GitOps-1.0.jpg 7 | --- 8 | 9 | GitOps is a term coined by Alexis Richardson a few years ago and has grown immensely in popularity. 10 | In a nutshell, GitOps is a set of principles for operating and managing software systems, derived from modern software operations, but also rooted in pre-existing and widely adopted best practices. 11 | However they differ in specific ways from traditional CI & CD pipeline approach that has dominated the industry for decades. 12 | Last year, Amazon, Azure, Codefresh, Github, Redhat, and Weaveworks teamed up to launch the GitOps Working Group under the CNCF. 13 | The goal was to formalize all the ideas that have developed around GitOps into a single cohesive set of principles that would be easily digestible and repeatable by any organization. 14 | 15 | We’re very proud to announce that over 60 companies, 96 interested parties, and 34 co-authors have brought the best of DevOps into the [OpenGitOps 1.0 Principles and Glossary](https://github.com/open-gitops/documents/releases/tag/v1.0.0). 16 | Each principle discusses the desired state of a system and how it should be operated. 17 | 18 | The desired state of a GitOps managed system must be: 19 | 20 | 1. **Declarative** 21 | 22 | A [system](https://github.com/open-gitops/documents/blob/v1.0.0/GLOSSARY.md#software-system) managed by GitOps must have its desired state expressed [declaratively](https://github.com/open-gitops/documents/blob/v1.0.0/GLOSSARY.md#declarative-description). 23 | 24 | 2. **Versioned and Immutable** 25 | 26 | Desired state is [stored](https://github.com/open-gitops/documents/blob/v1.0.0/GLOSSARY.md#state-store) in a way that enforces immutability, versioning and retains a complete version history. 27 | 28 | 3. **Pulled Automatically** 29 | 30 | Software agents automatically pull the desired state declarations from the source. 31 | 32 | 4. **Continuously Reconciled** 33 | 34 | Software agents [continuously](https://github.com/open-gitops/documents/blob/v1.0.0/GLOSSARY.md#continuous) observe actual system state and [attempt to apply](https://github.com/open-gitops/documents/blob/v1.0.0/GLOSSARY.md#reconciliation) the desired state. 35 | 36 | ## GitOps is more than just storing infrastructure-as-code 37 | 38 | As [git history shows](https://github.com/open-gitops/documents/commits/v1.0.0), the wording of each principle and linked glossary item was very carefully chosen. 39 | While many of these principles should be familiar to professionals, many are surprised to learn that they still have work to do to implement GitOps fully. 40 | 41 | _Declarative_ is usually the easiest principle to understand. 42 | Not just infrastructure-as-code but all configuration data that is needed to run a system including the application layer. 43 | While this doesn’t generally include persistent application data such as database contents it often includes credentials and configuration for data recovery or data access. 44 | 45 | _Versioned and Immutable_ is often understood as “use git” but there is more to it than that. 46 | If that desired state describes using a “latest” tag for example, it is no longer versioned because there is no way to rollback changes in the desired state. 47 | Likewise, many version control systems can be used in GitOps as long as they meet those two basic requirements and teams use them in a conformant manner. 48 | 49 | _Pulled Automatically_ means we have to have software agents constantly observing the desired state. 50 | While triggers may exist to speed up that observation, a GitOps system shouldn’t exclusively rely on them. 51 | Software agents need to constantly be aware of what the desired state should be, not only when a deliberate change is made. 52 | The verb “pull” here is used very clearly in contrast to the way traditional CI/CD pipelines function based on triggers that simply push. 53 | 54 | Finally, _Continuously Reconciled_ brings it all together. 55 | The GitOps software agents have to be aware of the actual state of a system under management and attempt to apply the desired state. 56 | Being constantly aware of both the actual state and desired state means we can detect anytime they are out of alignment whether by changes to the desired state (normal operation) or changes to the actual state (drift), a GitOps software agent should detect this attempt to apply the desired state. 57 | 58 | When teams implement these principles and achieve GitOps they deploy more often, have fewer regressions, and are more competitive. 59 | They bring together decades of experience delivering software to create a standard that is incredibly powerful and accessible and rapidly being adopted by a growing number of open source tools and vendors. 60 | 61 | ## What’s next 62 | 63 | There’s so much more on the horizon and we need your help! 64 | This vendor-neutral, principle-led meaning of GitOps establishes a foundation for interoperability between tools, conformance, and certification through lasting programs, documents, and code. 65 | 66 | How do you use GitOps? 67 | Join us in developing GitOps case studies and best practices, plan GitOps events, and help with the direction of the OpenGitOps project! 68 | 69 |