2 Commits

Author SHA1 Message Date
0b1979e4f1 Trigger build
Some checks failed
ci/woodpecker/push/go-generate Pipeline was successful
ci/woodpecker/push/js-generate Pipeline was successful
ci/woodpecker/push/lint Pipeline failed
ci/woodpecker/push/repo-checks Pipeline failed
Signed-off-by: Nikolai Rodionov <allanger@badhouseplants.net>
2026-04-25 15:39:24 +02:00
73f000791a Trigger build
Some checks failed
ci/woodpecker/push/js-generate Pipeline failed
ci/woodpecker/push/go-generate Pipeline was successful
ci/woodpecker/push/lint Pipeline failed
ci/woodpecker/push/repo-checks Pipeline failed
Signed-off-by: Nikolai Rodionov <allanger@badhouseplants.net>
2026-04-25 15:37:51 +02:00
13 changed files with 976 additions and 584 deletions

View File

@@ -1,41 +0,0 @@
---
when:
event:
- push
steps:
- name: Clone dart repo
image: alpine
environment:
GITEA_USER: devops-bot
GITEA_TOKEN:
from_secret: gitea_repo_access
commands:
- apk update && apk add git
- git clone https://$GITEA_USER:$GITEA_TOKEN@gitea.badhouseplants.net/softplayer/softplayer-dart-proto.git target
- git -C ./target config user.name "devops-bot"
- git -C ./target config user.email "bot@badhouseplants.net"
- git -C ./target checkout $CI_COMMIT_BRANCH || git -C ./target checkout -b $CI_COMMIT_BRANCH
- name: Generate code
image: bufbuild/buf
commands:
- buf generate
- rm -rf ./target/lib/src
- mkdir -p ./target/lib/src
- cp -r ./gen/dart/* ./target/
- name: Push the dart repo
image: alpine
environment:
GITEA_USER: devops-bot
GITEA_TOKEN:
from_secret: gitea_repo_access
commands:
- apk update && apk add git
- git -C ./target add .
- |-
git -C ./target commit --allow-empty \
-m "Update protobuf definitions: ${CI_COMMIT_SHA:0:8}" \
-m "By ${CI_COMMIT_AUTHOR}" \
-m "Commit link: ${CI_REPO_URL}/commit/${CI_COMMIT_SHA}" \
-m "Pipeline link: ${CI_PIPELINE_URL}"
- git -C ./target push --set-upstream origin $CI_COMMIT_BRANCH

View File

@@ -15,8 +15,7 @@ steps:
- git clone https://$GITEA_USER:$GITEA_TOKEN@gitea.badhouseplants.net/softplayer/softplayer-go-proto.git target
- git -C ./target config user.name "devops-bot"
- git -C ./target config user.email "bot@badhouseplants.net"
- git -C ./target checkout $CI_COMMIT_BRANCH || git -C ./target checkout -b $CI_COMMIT_BRANCH
- name: Generate code
- name: Generate go code
image: bufbuild/buf
commands:
- buf generate
@@ -30,6 +29,9 @@ steps:
from_secret: gitea_repo_access
commands:
- apk update && apk add git
- git config user.name "woodpecker-ci"
- git config user.email "bot@badhouseplants.net"
- git -C ./target checkout $CI_COMMIT_BRANCH || git -C ./target checkout -b $CI_COMMIT_BRANCH
- git -C ./target add .
- |-
git -C ./target commit --allow-empty \

View File

@@ -15,15 +15,14 @@ steps:
- git clone https://$GITEA_USER:$GITEA_TOKEN@gitea.badhouseplants.net/softplayer/softplayer-js-proto.git target
- git -C ./target config user.name "devops-bot"
- git -C ./target config user.email "bot@badhouseplants.net"
- git -C ./target checkout $CI_COMMIT_BRANCH || git -C ./target checkout -b $CI_COMMIT_BRANCH
- name: Generate code
- name: Generate js code
image: bufbuild/buf
commands:
- buf generate
- rm -rf ./target/src/api
- mkdir -p ./target/src/api
- cp -r ./gen/ts/* ./target/src/api
- name: Push the typescript repo
- name: Clone go repo
image: alpine
environment:
GITEA_USER: devops-bot
@@ -31,6 +30,9 @@ steps:
from_secret: gitea_repo_access
commands:
- apk update && apk add git
- git config user.name "woodpecker-ci"
- git config user.email "bot@badhouseplants.net"
- git -C ./target checkout $CI_COMMIT_BRANCH || git -C ./target checkout -b $CI_COMMIT_BRANCH
- git -C ./target add .
- |-
git -C ./target commit --allow-empty \

1087
README.md

File diff suppressed because it is too large Load Diff

View File

@@ -20,7 +20,3 @@ plugins:
out: .
opt:
- markdown,README.md
- remote: buf.build/protocolbuffers/dart:v25.0.0
out: gen/dart/lib/src
opt:
- grpc

View File

@@ -1,11 +1,3 @@
version: v2
modules:
- path: proto
lint:
use:
- STANDARD
enum_zero_value_suffix: _UNSPECIFIED
rpc_allow_same_request_response: true
rpc_allow_google_protobuf_empty_requests: true
rpc_allow_google_protobuf_empty_responses: true

View File

@@ -1,64 +1,60 @@
/// Protobuf definitions for the accounts service.
/// This file has messages for describing environments
syntax = "proto3";
package accounts.v1;
package accounts;
import "google/protobuf/empty.proto";
option go_package = "gitea.badhouseplants.net/softplayer/softplayer-go-proto/pkg/accounts/v1";
option go_package = "gitea.badhouseplants.net/softplayer/softplayer-go-proto/pkg/accounts";
/**
* Service for handling accounts that do not require authentication
* Service for handling environments
*/
service PublicAccountsService {
// Sing in into an existing account
rpc SignIn (SignInRequest) returns (google.protobuf.Empty) {}
// Create a new account
rpc SignUp (SignUpRequest) returns (google.protobuf.Empty) {}
service Accounts {
rpc SignUp (AccountWithPassword) returns (AccountFullWithToken) {}
rpc SignIn (AccountWithPassword) returns (AccountFullWithToken) {}
rpc ResetPassword (AccountData) returns (google.protobuf.Empty) {}
rpc NewPassword (AccountWithPasswordAndCode) returns (google.protobuf.Empty) {}
rpc IsEmailVerified (AccountData) returns (EmailVerified) {}
}
service AccountsService {
// Is email for the current account verified
rpc IsEmailVerified (IsEmailVerifiedRequest) returns (IsEmailVerifiedResponse) {}
rpc RefreshSession (google.protobuf.Empty) returns (google.protobuf.Empty) {}
// Authorize using long living tokens
rpc TokenAuthorization (google.protobuf.Empty) returns (google.protobuf.Empty) {}
message EmailVerified {
bool verified = 1;
}
/**
* Represents a environment UUID only
*/
message AccountId {
string id = 1; // Contour ID: UUID
}
message AccountPassword {
string password = 1;
}
message AccountData {
string name = 1; // Account name
string email = 2; // Account email
}
message SignUpRequest {
string email = 1;
string password = 2;
}
message SignInRequest {
string email = 1;
string password = 2;
};
message ResetPasswordRequest {
message AccountWithPassword {
AccountData data = 1;
AccountPassword password = 2;
}
message NewPasswordRequest {
message AccountWithPasswordAndCode {
AccountData data = 1;
AccountPassword password = 2;
string code = 3;
}
message IsEmailVerifiedRequest {
AccountData data = 1;
message AccountFull {
AccountId id = 1;
AccountData data = 2;
}
message IsEmailVerifiedResponse {
bool verified = 1;
message AccountFullWithToken {
AccountId id = 1;
AccountData data = 2;
string token = 3;
}
message RefreshTokenRequest {
string session_id = 1;
}

View File

@@ -0,0 +1,93 @@
/// This file has messages for describing applications
syntax = "proto3";
package applications;
import "google/protobuf/empty.proto";
option go_package = "gitea.badhouseplants.net/softplayer/softplayer-go-proto/pkg/applications";
/**
* Service for handling applications
*/
service Applications {
rpc Create(CreateOptions) returns (ApplicationFull) {}
rpc Update(UpdateOptions) returns (ApplicationFull) {}
rpc Delete(DeleteOptions) returns (google.protobuf.Empty) {}
rpc Get(GetOptions) returns (ApplicationFull) {}
rpc List(ListOptions) returns (stream ApplicationFull) {}
}
/**
User related messages
*/
message OwnerId {
string uuid = 1; // UUID of a user that is creating an environemnt
}
message Token {
string token = 1; // Token that should be used to create an environment
}
/**
Services options
*/
message CreateOptions {
ApplicationMetadata metadata = 1;
ApplicationSpec spec = 2;
OwnerId owner_id = 3;
Token token = 4;
}
message UpdateOptions {
ApplicationId id = 1;
ApplicationMetadata metadata = 2;
ApplicationSpec spec = 3;
OwnerId owner_id = 4;
Token token = 5;
}
message DeleteOptions {
ApplicationId id = 1;
ApplicationMetadata metadata = 2;
OwnerId owner_id = 3;
Token token = 4;
}
message GetOptions {
ApplicationId id = 1;
ApplicationMetadata metadata = 2;
OwnerId owner_id = 3;
Token token = 4;
}
message ListOptions {
ApplicationMetadata metadata = 1;
OwnerId owner_id = 2;
Token token = 3;
}
/**
Environment related messages
*/
message ApplicationId {
string uuid = 1;
}
message ApplicationMetadata {
string name = 1;
string description = 2;
}
message ApplicationSpec {
string application = 1;
string version = 2;
string environemnt_id = 3;
map<string, string> config = 4;
string raw_config = 5;
}
message ApplicationFull {
ApplicationMetadata metadata = 1;
ApplicationSpec spec = 2;
ApplicationId id = 3;
}

View File

@@ -0,0 +1,22 @@
syntax = "proto3";
package email;
import "google/protobuf/empty.proto";
option go_package = "gitea.badhouseplants.net/softplayer/softplayer-go-proto/pkg/email";
/*
* A service that should handle email validation
*/
service EmailValidation {
rpc SendRequest (RequestValidation) returns (google.protobuf.Empty) {}
rpc ValidateEmail (ConfirmValidation) returns (google.protobuf.Empty) {}
}
message RequestValidation {
string user_id = 1;
}
message ConfirmValidation {
string user_id = 1;
int32 code = 2;
}

View File

@@ -0,0 +1,125 @@
/// This file has messages for describing environments
syntax = "proto3";
package environments;
import "google/protobuf/empty.proto";
option go_package = "gitea.badhouseplants.net/softplayer/softplayer-go-proto/pkg/environments";
/**
* Service for handling environments
*/
service Environments {
rpc Create(CreateOptions) returns (EnvironmentFull) {}
rpc Update(UpdateOptions) returns (EnvironmentFull) {}
rpc Delete(DeleteOptions) returns (google.protobuf.Empty) {}
rpc Get(GetOptions) returns (EnvironmentFull) {}
rpc List(ListOptions) returns (stream EnvironmentFull) {}
}
/**
User related messages
*/
message OwnerId {
string uuid = 1; // UUID of a user that is creating an environemnt
}
message Token {
string token = 1; // Token that should be used to create an environment
}
/**
Services options
*/
message CreateOptions {
EnvironmentMetadata metadata = 1;
EnvironmentSpec spec = 2;
OwnerId owner_id = 3;
Token token = 4;
}
message UpdateOptions {
EnvironmentId id = 1;
EnvironmentMetadata metadata = 2;
EnvironmentSpec spec = 3;
OwnerId owner_id = 4;
Token token = 5;
}
message DeleteOptions {
EnvironmentId id = 1;
EnvironmentMetadata metadata = 2;
OwnerId owner_id = 3;
Token token = 4;
}
message GetOptions {
EnvironmentId id = 1;
EnvironmentMetadata metadata = 2;
OwnerId owner_id = 3;
Token token = 4;
}
message ListOptions {
EnvironmentMetadata metadata = 1;
string search_string = 2;
OwnerId owner_id = 3;
Token token = 4;
}
/**
Environment related messages
*/
message EnvironmentId {
string uuid = 1;
}
message EnvironmentMetadata {
string name = 1; // A name of the environment
string description = 2;
}
message EnvironmentSpec {
Provider provider = 1; // Provide
Kubernetes kubernetes = 2;
ServerType server_type = 3;
Location server_location = 4;
int32 disk_size = 5;
}
message EnvironmentFull {
EnvironmentMetadata metadata = 1;
EnvironmentSpec spec = 2;
EnvironmentId id = 3;
}
/**
Helpers and other messages
*/
enum Provider {
PROVIDER_UNSPECIFIED = 0;
PROVIDER_HETZNER = 1;
}
enum ServerType {
SERVER_TYPE_UNSPECIFIED = 0;
SERVER_TYPE_STARTER = 1;
SERVER_TYPE_REGULAR = 2;
SERVER_TYPE_PLUS = 3;
SERVER_TYPE_PRO = 4;
SERVER_TYPE_CUSTOM = 5;
}
enum Location {
LOCATION_UNSPECIFIED = 0;
LOCATION_HETZNER_NUREMBERG = 1;
LOCATION_HETZNER_FALKENSTEIN = 2;
LOCATION_HETZNER_HELSINKI = 3;
LOCATION_HETZNER_HILLSBORO = 4;
LOCATION_HETZNER_ASHBURN = 5;
}
enum Kubernetes {
KUBERNETES_UNSPECIFIED = 0;
KUBERNETES_K3S = 1;
}

View File

@@ -5,11 +5,8 @@ option go_package = "gitea.badhouseplants.net/softplayer/softplayer-go-proto/pkg
/**
* Service for handling environments
*/
service PublicTestService {
rpc Ping (PingRequest) returns (PingResponse) {}
}
service TestService {
rpc Ping (PingRequest) returns (PingResponse) {}
rpc Pong (PongRequest) returns (PongResponse) {}
}

View File

@@ -1,94 +0,0 @@
/// Protobuf definitions for the accounts service.
syntax = "proto3";
package tokens.v1;
import "google/protobuf/empty.proto";
import "google/protobuf/timestamp.proto";
option go_package = "gitea.badhouseplants.net/softplayer/softplayer-go-proto/pkg/tokens/v1";
// Tokens should be used for programmatic access
// For example CLI or terraform modules
service TokensService {
// Create a new token
rpc CreateToken (CreateTokenRequest) returns (CreateTokenResponse) {}
// Update an existing token
rpc UpdateToken (UpdateTokenRequest) returns (UpdateTokenResponse) {}
// Expire an existing token
rpc ForceTokenExpiration (ForceTokenExpirationRequest) returns (google.protobuf.Empty) {}
// Create a new token with the same UUID
rpc RegenerateToken (RegenerateTokenRequest) returns (RegenerateTokenResponse) {}
// Get an existing token
rpc GetToken (GetTokenRequest) returns (GetTokenResponse) {}
// List all existing tokens
rpc ListTokens (google.protobuf.Empty) returns (stream ListTokensResponse) {}
}
message TokenMetadata {
// A token name
string name = 1;
// Token expiration timestamp
google.protobuf.Timestamp expires_at = 2;
}
message TokenUUID {
// An ID of a token
string uuid = 1;
}
message TokenValue {
// Token value
// Can be only retrieved once after the generation
string token = 1;
}
message TokenPermissions {}
message CreateTokenRequest {
TokenMetadata token_metadata = 1;
TokenPermissions token_permissions = 2;
}
message CreateTokenResponse {
TokenUUID token_uuid = 1;
TokenMetadata token_metadata = 2;
TokenPermissions token_permissions = 3;
TokenValue token_value = 4;
}
message UpdateTokenRequest {
TokenUUID token_uuid = 1;
TokenMetadata token_metadata = 2;
TokenPermissions token_permissions = 3;
}
message UpdateTokenResponse {
TokenUUID token_uuid = 1;
TokenMetadata token_metadata = 2;
TokenPermissions token_permissions = 3;
}
message ForceTokenExpirationRequest {
TokenUUID token_uuid = 1;
}
message RegenerateTokenRequest {
TokenUUID token_uuid = 1;
}
message RegenerateTokenResponse {
TokenValue token_value = 1;
}
message GetTokenRequest {
TokenUUID token_uuid = 1;
}
message GetTokenResponse {
TokenUUID token_uuid = 1;
TokenMetadata token_metadata = 2;
TokenPermissions token_permissions = 3;
}
message ListTokensResponse {
TokenUUID token_uuid = 1;
TokenMetadata token_metadata = 2;
TokenPermissions token_permissions = 3;
}

View File

@@ -1,3 +0,0 @@
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json"
}