diff --git a/.github/workflows/upstream.yml b/.github/workflows/upstream.yml
index b2dda2bc..0b0f35eb 100644
--- a/.github/workflows/upstream.yml
+++ b/.github/workflows/upstream.yml
@@ -14,20 +14,42 @@ on:
- .github/workflows/upstream.yml # this file
jobs:
+ tests:
+ name: "tests (rails main)"
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ matrix:
+ ruby: ["3.3"]
+ steps:
+ - uses: actions/checkout@v4
+ - uses: ruby/setup-ruby@v1
+ with:
+ ruby-version: ${{matrix.ruby}}
+ - run: |
+ rm Gemfile.lock
+ bundle remove actionmailer
+ git clone --depth 1 --branch main https://github.com/rails/rails
+ bundle add actionmailer --path=rails
+ bundle add railties --path=rails
+ bundle install
+ - name: Run tests
+ run: bin/test
+
user-journey:
name: "user-journey (rails main)"
+ runs-on: ${{matrix.plat}}-latest
strategy:
fail-fast: false
matrix:
plat: ["ubuntu", "windows", "macos"]
- runs-on: ${{matrix.plat}}-latest
env:
RAILSOPTS: --git=https://github.com/rails/rails --branch main
steps:
- uses: actions/checkout@v4
- uses: ruby/setup-ruby@v1
with:
- ruby-version: "3.2"
+ ruby-version: "3.3"
bundler: latest
- run: test/integration/user_journey_test.sh
shell: bash
diff --git a/lib/generators/tailwindcss/authentication/authentication_generator.rb b/lib/generators/tailwindcss/authentication/authentication_generator.rb
new file mode 100644
index 00000000..aa6fc23b
--- /dev/null
+++ b/lib/generators/tailwindcss/authentication/authentication_generator.rb
@@ -0,0 +1,9 @@
+require "rails/generators/erb/authentication/authentication_generator"
+
+module Tailwindcss
+ module Generators
+ class AuthenticationGenerator < Erb::Generators::AuthenticationGenerator
+ source_root File.expand_path("templates", __dir__)
+ end
+ end
+end
diff --git a/lib/generators/tailwindcss/authentication/templates/views/passwords/edit.html.erb b/lib/generators/tailwindcss/authentication/templates/views/passwords/edit.html.erb
new file mode 100644
index 00000000..939b0b8d
--- /dev/null
+++ b/lib/generators/tailwindcss/authentication/templates/views/passwords/edit.html.erb
@@ -0,0 +1,21 @@
+
+ <%% if alert = flash[:alert] %>
+
<%%= alert %>
+ <%% end %>
+
+
Update your password
+
+ <%%= form_with url: password_path(params[:token]), method: :put, class: "contents" do |form| %>
+
+ <%%= form.password_field :password, required: true, autocomplete: "new-password", placeholder: "Enter new password", maxlength: 72, class: "block shadow rounded-md border border-gray-400 outline-none px-3 py-2 mt-2 w-full" %>
+
+
+
+ <%%= form.password_field :password_confirmation, required: true, autocomplete: "new-password", placeholder: "Repeat new password", maxlength: 72, class: "block shadow rounded-md border border-gray-400 outline-none px-3 py-2 mt-2 w-full" %>
+
+
+
+ <%%= form.submit "Save", class: "rounded-lg py-3 px-5 bg-blue-600 text-white inline-block font-medium cursor-pointer" %>
+
+ <%% end %>
+
diff --git a/lib/generators/tailwindcss/authentication/templates/views/passwords/new.html.erb b/lib/generators/tailwindcss/authentication/templates/views/passwords/new.html.erb
new file mode 100644
index 00000000..e5d88197
--- /dev/null
+++ b/lib/generators/tailwindcss/authentication/templates/views/passwords/new.html.erb
@@ -0,0 +1,17 @@
+
+ <%% if alert = flash[:alert] %>
+
<%%= alert %>
+ <%% end %>
+
+
Forgot your password?
+
+ <%%= form_with url: passwords_path, class: "contents" do |form| %>
+
+ <%%= form.email_field :email_address, required: true, autofocus: true, autocomplete: "username", placeholder: "Enter your email address", value: params[:email_address], class: "block shadow rounded-md border border-gray-400 outline-none px-3 py-2 mt-2 w-full" %>
+
+
+
+ <%%= form.submit "Email reset instructions", class: "rounded-lg py-3 px-5 bg-blue-600 text-white inline-block font-medium cursor-pointer" %>
+
+ <%% end %>
+
diff --git a/lib/generators/tailwindcss/authentication/templates/views/sessions/new.html.erb b/lib/generators/tailwindcss/authentication/templates/views/sessions/new.html.erb
new file mode 100644
index 00000000..a4751541
--- /dev/null
+++ b/lib/generators/tailwindcss/authentication/templates/views/sessions/new.html.erb
@@ -0,0 +1,31 @@
+
+ <%% if alert = flash[:alert] %>
+
<%%= alert %>
+ <%% end %>
+
+ <%% if notice = flash[:notice] %>
+
<%%= notice %>
+ <%% end %>
+
+
Sign in
+
+ <%%= form_with url: session_url, class: "contents" do |form| %>
+
+ <%%= form.email_field :email_address, required: true, autofocus: true, autocomplete: "username", placeholder: "Enter your email address", value: params[:email_address], class: "block shadow rounded-md border border-gray-400 outline-none px-3 py-2 mt-2 w-full" %>
+
+
+
+ <%%= form.password_field :password, required: true, autocomplete: "current-password", placeholder: "Enter your password", maxlength: 72, class: "block shadow rounded-md border border-gray-400 outline-none px-3 py-2 mt-2 w-full" %>
+
+
+
+
+ <%%= form.submit "Sign in", class: "rounded-lg py-3 px-5 bg-blue-600 text-white inline-block font-medium cursor-pointer" %>
+
+
+
+ <%%= link_to "Forgot password?", new_password_path, class: "text-gray-700 underline" %>
+
+
+ <%% end %>
+
diff --git a/test/lib/generators/tailwindcss/authentication_generator_test.rb b/test/lib/generators/tailwindcss/authentication_generator_test.rb
new file mode 100644
index 00000000..bdf712b0
--- /dev/null
+++ b/test/lib/generators/tailwindcss/authentication_generator_test.rb
@@ -0,0 +1,16 @@
+require "test_helper"
+
+if Rails::VERSION::MAJOR >= 8
+ require "generators/tailwindcss/authentication/authentication_generator"
+
+ class Tailwindcss::Generators::AuthenticationGeneratorTest < Rails::Generators::TestCase
+ tests Tailwindcss::Generators::AuthenticationGenerator
+ destination TAILWINDCSS_TEST_APP_ROOT
+
+ test "generates the new session template" do
+ run_generator
+
+ assert_file "app/views/sessions/new.html.erb"
+ end
+ end
+end