From 54241e8dfd635aff2b564baec88a859dd3fb0418 Mon Sep 17 00:00:00 2001 From: Chris Zhu Date: Thu, 13 Feb 2025 20:20:49 -0800 Subject: [PATCH 01/18] create users without github --- .../application/_error_messages.html.erb | 18 ++++++ app/views/devise/registrations/new.html.erb | 56 ++++++++++++++++++- app/views/devise/sessions/new.html.erb | 42 +++++++++++++- 3 files changed, 112 insertions(+), 4 deletions(-) create mode 100644 app/views/application/_error_messages.html.erb diff --git a/app/views/application/_error_messages.html.erb b/app/views/application/_error_messages.html.erb new file mode 100644 index 00000000..cfcb043f --- /dev/null +++ b/app/views/application/_error_messages.html.erb @@ -0,0 +1,18 @@ +<% if resource.errors.any? %> + +<% end %> \ No newline at end of file diff --git a/app/views/devise/registrations/new.html.erb b/app/views/devise/registrations/new.html.erb index bddef7c3..13db6e61 100644 --- a/app/views/devise/registrations/new.html.erb +++ b/app/views/devise/registrations/new.html.erb @@ -1,9 +1,61 @@
-
- <%= render "devise/shared/links" %> +

Sign up

+
+ <%= link_to "Sign in", new_user_session_path, class: "underline" %> instead
+ + <% if @account_invitation %> +
+ <%= image_tag avatar_url_for(@account_invitation.account), class: "h-5 w-5 rounded-full inline-block mr-1" %> +
+ <%= @account_invitation.invited_by.name %> invited you to join <%= @account_invitation.account.name %> +
+
+ <% end %> + + <%= form_with( + model: resource, + as: resource_name, + url: registration_path(resource_name, invite: params[:invite]), + html: { class: "space-y-4" }, + ) do |f| %> + <%= render "error_messages", resource: resource %> + +
+ <%= f.label :name, class: "label" do %> + Name + <% end %> + <%= f.text_field :name, autocomplete: "name", placeholder: true, class: "input input-bordered w-full" %> +
+ +
+ <%= f.label :email, class: "label" do %> + Email + <% end %> + <%= f.email_field :email, autocomplete: "email", placeholder: true, class: "input input-bordered w-full" %> +
+ +
+ <%= f.label :password, class: "label" do %> + Password + <% end %> + <%= f.password_field :password, autocomplete: "new-password", placeholder: true, class: "input input-bordered w-full" %> +
+ +
+ <%= f.submit "Sign in", class: "btn btn-primary w-full" %> +
+ <% end %> + +
+
+ OR +
+
+ + <%= render "devise/shared/links" %>
diff --git a/app/views/devise/sessions/new.html.erb b/app/views/devise/sessions/new.html.erb index 726c5a59..5fc2662e 100644 --- a/app/views/devise/sessions/new.html.erb +++ b/app/views/devise/sessions/new.html.erb @@ -2,9 +2,47 @@

Log in

-
- <%= render "devise/shared/links" %> +
+ <%= link_to "Sign up", new_user_registration_path, class: "underline" %> instead
+ + <%= form_with(model: resource, as: resource_name, url: session_path(resource_name), html: { class: "space-y-4" }) do |f| %> + <%= render "error_messages", resource: resource %> + +
+ <%= f.label :email, class: "label" do %> + Email + <% end %> + <%= f.email_field :email, autofocus: true, autocomplete: "email", placeholder: true, class: "input input-bordered w-full" %> +
+ +
+ <%= f.label :password, class: "label" do %> + Password + <% end %> + <%= f.password_field :password, autocomplete: "current-password", placeholder: true, class: "input input-bordered w-full" %> +
+ + <% if devise_mapping.rememberable? -%> +
+ +
+ <% end %> + +
+ <%= f.submit "Sign in", class: "btn btn-primary w-full" %> +
+ <% end %> + +
+
+ OR +
+
+ <%= render "devise/shared/links" %>
From 75ab21494ce9a9918679c4450d84a42166a4659c Mon Sep 17 00:00:00 2001 From: Matt Marcin Date: Thu, 20 Mar 2025 09:37:35 -0700 Subject: [PATCH 02/18] Update README.md Old link did not work without setting up a public key. Cloning over https fixes this. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2640dc89..78082802 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ curl -sSL https://raw.githubusercontent.com/czhu12/canine/refs/heads/main/instal Or run manually if you prefer: ```bash -git clone git@github.com:czhu12/canine.git +git clone https://github.com/czhu12/canine.git cd canine/install docker compose up -d ``` From ca6a08fd8e034de7bed742b3ae5de38d0b0033c0 Mon Sep 17 00:00:00 2001 From: Chris Zhu Date: Sat, 22 Mar 2025 01:29:37 -0700 Subject: [PATCH 03/18] Update README --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 2640dc89..736677c9 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,9 @@ Canine Cloud offers additional features for small teams: For more information & pricing, take a look at our landing page [https://canine.sh](https://canine.sh). +## Repo Activity +![Alt](https://repobeats.axiom.co/api/embed/0af4ce8a75f4a12ec78973ddf7021c769b9a0051.svg "Repobeats analytics image") + ## License [MIT License](https://github.com/czhu12/canine/blob/main/LICENSE) From 14df0163587d5b4a48bec121a2e59ad1a83b2e4e Mon Sep 17 00:00:00 2001 From: Chris Zhu Date: Tue, 25 Mar 2025 11:39:56 -0700 Subject: [PATCH 04/18] update TODO --- TODO.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/TODO.md b/TODO.md index a2cbe7d5..ebc9c097 100644 --- a/TODO.md +++ b/TODO.md @@ -17,4 +17,5 @@ - [ ] Pre-deploy task - [ ] Metrics improvement: https://stackoverflow.com/questions/68058199/chartjs-need-help-on-drawing-a-vertical-line-when-hovering-cursor - [ ] Add metrics page for add ons -- [ ] improve helm chart previews \ No newline at end of file +- [ ] improve helm chart previews +- [ ] Web socket issues with deployment status's \ No newline at end of file From fa7225be18e2cded6df90d28c08234aae596b2b8 Mon Sep 17 00:00:00 2001 From: Chris Zhu Date: Tue, 25 Mar 2025 11:57:02 -0700 Subject: [PATCH 05/18] added logo to pricing calculator --- app/javascript/controllers/pricing_controller.js | 4 +++- public/resources/prices.json | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/javascript/controllers/pricing_controller.js b/app/javascript/controllers/pricing_controller.js index 9dd60ece..003a57b5 100644 --- a/app/javascript/controllers/pricing_controller.js +++ b/app/javascript/controllers/pricing_controller.js @@ -172,8 +172,10 @@ export default class extends Controller { cost(breakdown) { return breakdown.reduce((sum, b) => sum + (typeof b.cost === 'number' ? b.cost : 0), 0); } + render(service, breakdown) { const serviceName = this.pricesValue[service].name + const supportsCanine = this.pricesValue[service].canine if (breakdown.error) { return `
@@ -188,7 +190,7 @@ export default class extends Controller { const header = `
- ${serviceName} + ${serviceName}${supportsCanine ? '+' : ''}
${total == 0 ? 'FREE' : `$${total}.00`}
diff --git a/public/resources/prices.json b/public/resources/prices.json index b549d57c..5e46e26b 100644 --- a/public/resources/prices.json +++ b/public/resources/prices.json @@ -3,7 +3,7 @@ "name": "Heroku", "color": "#430098", "seat": 0, - "canine": true, + "canine": false, "tiers": [ { "name": "Basic", From 478f97c825336ffb0aa3d7ac2172ca5c3be37e44 Mon Sep 17 00:00:00 2001 From: Chris Zhu Date: Sun, 16 Mar 2025 14:42:37 -0700 Subject: [PATCH 06/18] wip --- app/controllers/projects_controller.rb | 4 ++-- .../users/omniauth_callbacks_controller.rb | 8 ------- .../users/registrations_controller.rb | 9 ++++++++ app/views/devise/registrations/new.html.erb | 2 +- app/views/projects/_new_form.html.erb | 6 +++-- .../create/_missing_credentials.html.erb | 7 ------ .../_missing_docker_hub_credentials.html.erb | 14 ++++++++++++ .../_missing_github_credentials.html.erb | 22 +++++++++++++++++++ 8 files changed, 52 insertions(+), 20 deletions(-) delete mode 100644 app/views/projects/create/_missing_credentials.html.erb create mode 100644 app/views/projects/create/_missing_docker_hub_credentials.html.erb create mode 100644 app/views/projects/create/_missing_github_credentials.html.erb diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index edafea9c..96f9669f 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -28,8 +28,8 @@ class ProjectsController < ApplicationController # GET /projects/new def new - selected_provider = params[:provider] || Provider::GITHUB_PROVIDER - @providers = current_user.providers.where(provider: selected_provider) + @selected_provider = params[:provider] || Provider::GITHUB_PROVIDER + @providers = current_user.providers.where(provider: @selected_provider) # Temporary hack @provider = @providers.first @project = Project.new diff --git a/app/controllers/users/omniauth_callbacks_controller.rb b/app/controllers/users/omniauth_callbacks_controller.rb index ea24b764..5800bf61 100644 --- a/app/controllers/users/omniauth_callbacks_controller.rb +++ b/app/controllers/users/omniauth_callbacks_controller.rb @@ -9,14 +9,6 @@ module Users redirect_to root_path, alert: "Something went wrong" end - def facebook - handle_auth "Facebook" - end - - def twitter - handle_auth "Twitter" - end - def github handle_auth "Github" end diff --git a/app/controllers/users/registrations_controller.rb b/app/controllers/users/registrations_controller.rb index 52ea44a3..3ab1cdca 100644 --- a/app/controllers/users/registrations_controller.rb +++ b/app/controllers/users/registrations_controller.rb @@ -1,6 +1,15 @@ class Users::RegistrationsController < Devise::RegistrationsController layout 'homepage', only: [ :new, :create ] + def create + ActiveRecord::Base.transaction do + super do |user| + account = Account.create!(name: "#{user.first_name}'s Account", owner: user) if user.persisted? + AccountUser.create!(account:, user:) + end + end + end + protected def update_resource(resource, params) if account_update_params[:password].blank? diff --git a/app/views/devise/registrations/new.html.erb b/app/views/devise/registrations/new.html.erb index 13db6e61..37f15ee9 100644 --- a/app/views/devise/registrations/new.html.erb +++ b/app/views/devise/registrations/new.html.erb @@ -27,7 +27,7 @@ <%= f.label :name, class: "label" do %> Name <% end %> - <%= f.text_field :name, autocomplete: "name", placeholder: true, class: "input input-bordered w-full" %> + <%= f.text_field :name, autocomplete: "off", placeholder: true, class: "input input-bordered w-full" %>
diff --git a/app/views/projects/_new_form.html.erb b/app/views/projects/_new_form.html.erb index 9fa411f3..c4ca7e88 100644 --- a/app/views/projects/_new_form.html.erb +++ b/app/views/projects/_new_form.html.erb @@ -1,5 +1,7 @@ -<% if provider.nil? %> - <%= render "projects/create/missing_credentials", project: %> +<% if provider.nil? && @selected_provider == Provider::GITHUB_PROVIDER %> + <%= render "projects/create/missing_github_credentials", project: %> +<% elsif provider.nil? && @selected_provider == Provider::DOCKER_HUB_PROVIDER %> + <%= render "projects/create/missing_docker_hub_credentials", project: %> <% elsif provider.docker_hub? %> <%= render "projects/create/new_form_docker_hub", project:, provider: %> <% else %> diff --git a/app/views/projects/create/_missing_credentials.html.erb b/app/views/projects/create/_missing_credentials.html.erb deleted file mode 100644 index c0f0ec48..00000000 --- a/app/views/projects/create/_missing_credentials.html.erb +++ /dev/null @@ -1,7 +0,0 @@ -
-
-

Missing Credentials for <%= params[:provider].titleize %>

-

Please provide your <%= params[:provider].titleize %> credentials to continue.

- <%= link_to "Add Credentials", providers_path, class: "mt-6 btn btn-primary", data: { turbo: false } %> -
-
diff --git a/app/views/projects/create/_missing_docker_hub_credentials.html.erb b/app/views/projects/create/_missing_docker_hub_credentials.html.erb new file mode 100644 index 00000000..e07ec815 --- /dev/null +++ b/app/views/projects/create/_missing_docker_hub_credentials.html.erb @@ -0,0 +1,14 @@ +
+
+

Missing Credentials for Docker Hub

+

Please provide your Docker Hub credentials to continue.

+ <%= link_to "Add Credentials", providers_path, class: "mt-6 btn btn-primary", data: { turbo: false } %> +
+ <%= link_to( + "Deploy from Github instead →", + new_project_path(provider: Provider::GITHUB_PROVIDER), + class: "inline-block mt-2 underline underline-offset-4 text-blue-300 hover:text-blue-200 text-sm", + ) %> +
+
+
\ No newline at end of file diff --git a/app/views/projects/create/_missing_github_credentials.html.erb b/app/views/projects/create/_missing_github_credentials.html.erb new file mode 100644 index 00000000..eb7c21e7 --- /dev/null +++ b/app/views/projects/create/_missing_github_credentials.html.erb @@ -0,0 +1,22 @@ +
+
+

Missing Credentials for Github

+

Please provide your Github credentials to continue.

+
+ + <%= link_to "Manually Add Credentials", providers_path, class: "mt-6 btn btn-ghost", data: { turbo: false } %> +
+
+ <%= link_to( + "Deploy from Docker Hub instead →", + new_project_path(provider: Provider::DOCKER_HUB_PROVIDER), + class: "inline-block mt-2 underline underline-offset-4 text-blue-300 hover:text-blue-200 text-sm", + ) %> +
+
+
From 616ee803b8eef84b5414bbd05a58850ce8b5ebe1 Mon Sep 17 00:00:00 2001 From: Chris Zhu Date: Wed, 26 Mar 2025 20:07:48 -0700 Subject: [PATCH 07/18] fix github search --- .../controllers/github_select_repository_controller.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/javascript/controllers/github_select_repository_controller.js b/app/javascript/controllers/github_select_repository_controller.js index 89e9e30e..29fa5255 100644 --- a/app/javascript/controllers/github_select_repository_controller.js +++ b/app/javascript/controllers/github_select_repository_controller.js @@ -17,7 +17,8 @@ export default class extends Controller { } async filterRepositories(e) { - this.searchFunc(e) + e.preventDefault(); + this.searchFunc(e); } closeModal() { From cc3f07e76974f4f18b89023866930d61f3483552 Mon Sep 17 00:00:00 2001 From: Chris Zhu Date: Wed, 26 Mar 2025 22:07:09 -0700 Subject: [PATCH 08/18] public --- public/apple-touch-icon.png | Bin 0 -> 20855 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 public/apple-touch-icon.png diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..2a499685bba04f16ef53b0751d4ca4de8700b82e GIT binary patch literal 20855 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 Date: Thu, 27 Mar 2025 21:44:19 -0700 Subject: [PATCH 09/18] remove random name generator --- TODO.md | 1 - app/services/random_name_generator.rb | 11 ----------- app/views/add_ons/new.html.erb | 2 +- app/views/clusters/_form.html.erb | 2 +- .../create/_new_form_docker_hub.html.erb | 2 +- .../projects/create/_new_form_github.html.erb | 2 +- public/images/dark.png | Bin 0 -> 23342 bytes 7 files changed, 4 insertions(+), 16 deletions(-) delete mode 100644 app/services/random_name_generator.rb create mode 100644 public/images/dark.png diff --git a/TODO.md b/TODO.md index ebc9c097..6689602a 100644 --- a/TODO.md +++ b/TODO.md @@ -6,7 +6,6 @@ - [ ] Support login without Github - [ ] Support organization projects - [ ] Add skeleton loader for processes page -- [ ] Migrate to goodjob to support scheduled jobs without a ton of separate gems - [ ] Gray out deploy button if there are no services - [ ] Make the metrics page look better + filter - [ ] Show ingress logs at the cluster level -- parse NGINX logs diff --git a/app/services/random_name_generator.rb b/app/services/random_name_generator.rb deleted file mode 100644 index f7fa7256..00000000 --- a/app/services/random_name_generator.rb +++ /dev/null @@ -1,11 +0,0 @@ -class RandomNameGenerator - ADJECTIVES = %w[quick lazy happy brave clever quiet mighty kind shiny eager] - NOUNS = %w[fox bear wolf tiger lion eagle owl deer hare dolphin] - - def self.generate_name(prefix = nil) - adjective = ADJECTIVES.sample - noun = NOUNS.sample - name = "#{adjective}-#{noun}" - prefix ? "#{prefix}-#{name}" : name - end -end diff --git a/app/views/add_ons/new.html.erb b/app/views/add_ons/new.html.erb index a8e9d621..fbf05678 100644 --- a/app/views/add_ons/new.html.erb +++ b/app/views/add_ons/new.html.erb @@ -14,7 +14,7 @@ <%= form_with(model: @add_on) do |form| %>
<%= form.label :name %> - <%= form.text_field :name, class: "input input-bordered", value: RandomNameGenerator.generate_name %> + <%= form.text_field :name, class: "input input-bordered", autofocus: true, required: true %>
diff --git a/app/views/clusters/_form.html.erb b/app/views/clusters/_form.html.erb index 09d46cb6..a2a26921 100644 --- a/app/views/clusters/_form.html.erb +++ b/app/views/clusters/_form.html.erb @@ -3,7 +3,7 @@
<%= form.label :name %> - <%= form.text_field :name, class: "input input-bordered", value: RandomNameGenerator.generate_name %> + <%= form.text_field :name, class: "input input-bordered", autofocus: true, required: true %>
diff --git a/app/views/projects/create/_new_form_docker_hub.html.erb b/app/views/projects/create/_new_form_docker_hub.html.erb index db873d0d..855b73eb 100644 --- a/app/views/projects/create/_new_form_docker_hub.html.erb +++ b/app/views/projects/create/_new_form_docker_hub.html.erb @@ -14,7 +14,7 @@ - <%= form.text_field :name, class: "input input-bordered w-full focus:outline-offset-0", value: RandomNameGenerator.generate_name %> + <%= form.text_field :name, class: "input input-bordered w-full focus:outline-offset-0", autofocus: true, required: true %> diff --git a/app/views/projects/create/_new_form_github.html.erb b/app/views/projects/create/_new_form_github.html.erb index 64f177fb..4dfd8ff0 100644 --- a/app/views/projects/create/_new_form_github.html.erb +++ b/app/views/projects/create/_new_form_github.html.erb @@ -14,7 +14,7 @@ - <%= form.text_field :name, class: "input input-bordered w-full focus:outline-offset-0", value: RandomNameGenerator.generate_name %> + <%= form.text_field :name, class: "input input-bordered w-full focus:outline-offset-0", autofocus: true, required: true %> diff --git a/public/images/dark.png b/public/images/dark.png new file mode 100644 index 0000000000000000000000000000000000000000..91c219c2c662d73a930de8faa9d59b06d2f60de7 GIT binary patch literal 23342 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 X2(VW+?s||KKzN?2JbzrKj12idww5Q# literal 0 HcmV?d00001 From 0ffd06c6e25efb7b5cde7d49ae3d8da82bdb3e97 Mon Sep 17 00:00:00 2001 From: Celina Lopez Date: Mon, 31 Mar 2025 09:37:44 -0700 Subject: [PATCH 10/18] name of kubeconfig yaml --- app/javascript/controllers/processes_controller.js | 4 ++-- app/views/processes/_pods.html.erb | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/app/javascript/controllers/processes_controller.js b/app/javascript/controllers/processes_controller.js index 6ec30dd0..fb9af2a6 100644 --- a/app/javascript/controllers/processes_controller.js +++ b/app/javascript/controllers/processes_controller.js @@ -15,8 +15,8 @@ export default class extends Controller { showConnectionInstructions(event) { event.preventDefault(); - const text = `KUBECONFIG=/path/to/kubeconfig.yml kubectl exec -it -n ${event.target.dataset.namespace} ${event.target.dataset.podName} -- /bin/bash` + const text = `KUBECONFIG=/path/to/${event.target.dataset.clusterName}-kubeconfig.yml kubectl exec -it -n ${event.target.dataset.namespace} ${event.target.dataset.podName} -- /bin/bash` this.commandTarget.textContent = text click_outside_modal.showModal() } -} \ No newline at end of file +} diff --git a/app/views/processes/_pods.html.erb b/app/views/processes/_pods.html.erb index 7d96091f..cd337150 100644 --- a/app/views/processes/_pods.html.erb +++ b/app/views/processes/_pods.html.erb @@ -73,6 +73,7 @@ data-action="click->processes#showConnectionInstructions" data-pod-name="<%= pod.metadata.name %>" data-namespace="<%= pod.metadata.namespace %>" + data-cluster-name="<%= parent.cluster.name %>" >Connect <% else %>