Giter Club home page Giter Club logo

solo-apis's Introduction

Solo.io APIs

This repository hosts the Solo.io API definitions. It is intended as a read-only mirror; the source of truth for the APIs are the projects that own them. The goal of this repository is to allow for projects to consume an API without having to depend on the project that owns it.

Mirroring Product APIs

There are several products (Gloo Edge, Gloo Platform) which leverage this repository to host read-only mirrors of their APIs.

To keep those APIs distinct for each product and each long term support version of that product, we use github branches to maintain isolation.

The branch naming pattern is: [PRODUCT PREFIX]-[PRODUCT LTS BRANCH NAME]

So for example, the Gloo Edge 1.14.x APIs, are maintained in the gloo-v1.14.x branch in this repo.

Main Branch

As a result of the above API tracking approach, the main branch in this repository has no functionality.

solo-apis's People

Contributors

arianaw66 avatar ashleywang1 avatar bslabe123 avatar colin-arnott-xero avatar eitanya avatar elcasteel avatar github-actions[bot] avatar gunnar-solo avatar jahvon avatar jehawley avatar jenshu avatar marcogschmidt avatar nfuden avatar npolshakova avatar saiskee avatar sam-heilbron avatar sodman avatar soloio-bot avatar yuval-k avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

solo-apis's Issues

use non default scheme

currently NewClientsetFromConfig use and mutate the global scheme.Scheme. This is problematic, as if other parts of the program use it as well a data race will occur.
we need to be able to use a different scheme

audit go mod replace

In go modules, replace directives are at best viral. They tend to make adoption, upgrades, and package management harder than GOPATH. They are intended as an escape hatch for development, not a longterm resolution, and should not really ever be contained within public facing modules intended for consumption.

As such, I would like to use this issue audit the current list of requires, track upstream fixes, and if possible remove them entirely:

go.mod#replace
// pinned to solo-io's fork of cue version 308aee4ff0928a8e0ec25b9cbbdc445264038463
// note(ilackarms): this replace must be shared in any skv2-based go module due to incompatibility with upstream versions of cue
cuelang.org/go => github.com/solo-io/cue v0.4.1-0.20210623143425-308aee4ff092
github.com/docker/docker => github.com/moby/moby v0.7.3-0.20190826074503-38ab9da00309
k8s.io/apimachinery => k8s.io/apimachinery v0.19.6
k8s.io/client-go => k8s.io/client-go v0.19.6
  • cuelang.org/go
  • github.com/docker/docker
  • k8s.io/apimachinery
  • k8s.io/client-go

Add gloo federation go types

There seems to be missing go types for gloo federation such as FederatedUpstream, FederatedVirtualService, etc.
They will make it easier operating gloo fed CRDs programmatically.

go.mod differs from compat matrix

Currently the gloo (edge) docs list explicit compatibility with kubernetes versions. The go.mod on the other hand, pins [recte replace] to one specific kubernetes version. For 1.10 and 1.11, this version is even outside of the gloo (edge) supported range. As well, I am unclear what I should do as a consumer if I want to use symbols from k8s.io/[email protected] in my controller, when solo-apis requires that I use a lower version. Similarly, because every kubernetes "minor" version may include breaking changes removing deprecated symbols, what should I do if I need symbols that from k8s.io/[email protected] that do not exist in solo-apis' version?

gloo series kubernetes compat kubernetes go.mod
1.11.x 1.21 - 1.22 1.20.9
1.10.x 1.21 - 1.22 1.20.9
1.9.x 1.19 - 1.22 1.19.6
1.8.x 1.19 - 1.21 1.19.6

Gloo Mesh 2.0 APIs

We have had a couple of prospects asking us if APIs exist for Gloo Mesh 2.0 for them to consume and build controllers/operators.

Looks like it exists for 1.2.x under the branch gloo-mesh-v1.2.17 so will be good to have something for 2.x as well.

Depend on solo-io/cue fork directly

Context

For projects to use the codegen package of our skv2 library, we require that they replace the cuelang dependency with our internal fork of cue.

https://github.com/solo-io/solo-apis/blob/master/go.mod#L8:

// pinned to solo-io's fork of cue version 308aee4ff0928a8e0ec25b9cbbdc445264038463
// note(ilackarms): this replace must be shared in any skv2-based go module due to incompatibility with upstream versions of cue
cuelang.org/go => github.com/solo-io/cue v0.4.1-0.20210623143425-308aee4ff092

As the comment outlines, this requires all go modules consuming skv2 to explicitly replace the dependency. For internal projects this is ok, but we should not leak our dependency management to users who only want to import the solo-apis repository as a read-only mirror for building custom controllers.

How does this affect users?

  1. Create a new go project
  2. go get -u github.com/solo-io/[email protected]
  3. Error:
github.com/solo-io/solo-apis imports
	github.com/solo-io/solo-apis/codegen imports
	github.com/solo-io/skv2/codegen imports
	github.com/solo-io/skv2/codegen/proto imports
	cuelang.org/go/encoding/protobuf/cue: cannot find module providing package cuelang.org/go/encoding/protobuf/cue

Option 1

Depend on solo-io/cue directly

Option 2

Restructure skv2 package so that libraries which do not depend on cue or schema generation at all, do not require the dependency.

Outcome

I'm proposing we move forward with Option 1.

  • 1. Update cue fork module path: https://github.com/solo-io/cue/blob/master/go.mod#L1
  • 2. Update skv2 to depend on solo-io/cue directly, removing the need to replace the cue dependency: https://github.com/solo-io/skv2/blob/master/go.mod#L67
  • 3. Notify the Mesh team that we have modified the skv2 library, outlining the effect is has on gloo-mesh/gloo-mesh-enterprise
  • 4. Upgrade skv2 dependency in solo-apis, removing the need to replace cue as well.
  • 5. Validate these changes by opening a new go project and importing only solo-apis, this should succeed.
  • 6. Release these changes both as a 1.10 tag and a 1.9 tag
  • 7. (NICE TO HAVE) Our skv2 dependencies in gloo/s-p are a bit out of date, can we upgrade those?

proper go versioning

Potentially as an "in beta" decision, tags are made as gloo-v1.10.26, which means that you can check them out, but it is not possible to do a go get github.com/solo-io/[email protected]. Could we use proper semver tags as well or instead?

Currently one must go get github.com/solo-io/[email protected] and and is left with a nasty require github.com/solo-io/solo-apis v0.0.0-20220603153129-5b9fd2e8dbb7 in go.mod.

rate limit api can easily get dated

the proto is copied here, updated manually (e.g. #39). this is dangerous because our hash functions etc. depend on this in gloo

hashing bugs are VERY dangerous and this WILL bite us with customers eventually. this is a high priority bug

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.