planetscale_rails 0.1.2 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7ed08836cfb00024906d50ede95a0237ee6fbce02ab89d138a812e939d1056c5
4
- data.tar.gz: 8080c0fe4eaf9d00d8e851dfe087a55cdf4dbf741228b29aea1ebbb92706f463
3
+ metadata.gz: 1fac50d24f5d87d2be01f128dd42f63b75023d7761d5516c92ac8ad92f776fae
4
+ data.tar.gz: 29a0fc6de3302ccd5b228c458facf7516147c2ca78b5f1717979bfbd6d8534d8
5
5
  SHA512:
6
- metadata.gz: d89b0dc3b6d77bcd9663b10706bcb82021dc15b6f15cb1b3446008eef71a22abd3af20f07b58a5b3cb4c590e2ca65c1a202e2cf364f3bd1f2e4b97fcd779432a
7
- data.tar.gz: 13ac640ae92257eca79aa2d7462280f1361c4e275c9b7c490da8bba9ca4f15c58f32cf1738e15bbe59d23643bd301b6744c76232f6c5c7c246a8995444851659
6
+ metadata.gz: 3993c4de9fb27abda2d3f9506f28a8f8c8b12312540fdee58d7838d37fb8af25fba31b2b7c291915e9f1488fc8586708f516e6149dede3fe26a4c22ce5e44cb9
7
+ data.tar.gz: 93bcfb6f5d2f2bc0096de75029a2c12de9db97ab1fa591aa50e37d8d1548c23142a2dbda0079d51b8078d160f3535ba8bed3965042331e7b447136d69abdd997
data/README.md CHANGED
@@ -12,10 +12,10 @@ The rake tasks allow you to use local MySQL for development. When you're ready t
12
12
  against it. See [usage](#usage) for details.
13
13
 
14
14
  ```
15
- rake psdb:migrate # Migrate the database for current environment
16
- rake psdb:rollback # Rollback primary database for current environment
17
- rake psdb:schema:load # Load the current schema into the database
18
- rake psdb:setup_pscale # Setup a proxy to connect to PlanetScale
15
+ rake psdb:migrate # Migrate the database for current environment
16
+ rake psdb:rollback # Rollback primary database for current environment
17
+ rake psdb:schema:load # Load the current schema into the database
18
+ rake psdb:setup_pscale # Setup a proxy to connect to PlanetScale
19
19
  ```
20
20
 
21
21
  ## Installation
@@ -28,20 +28,40 @@ group :development do
28
28
  end
29
29
  ```
30
30
 
31
- And then execute:
31
+ And then execute in your terminal:
32
32
 
33
- $ bundle install
33
+ ```
34
+ bundle install
35
+ ```
36
+
37
+ ### Update database.yml
38
+
39
+ In your application's `database.yml`, you'll need to make two changes. This will allow the app to run migrations via a connection setup by the pscale CLI.
40
+
41
+ 1. Swap to port 3305 if `ENV['ENABLE_PSDB']` is true.
42
+ 2. Use production database name if `ENV['ENABLE_PSDB']` is true.
43
+
44
+ Here is an example
45
+
46
+ ```
47
+ development:
48
+ <<: *default
49
+ database: <%= ENV['ENABLE_PSDB'] ? 'your_production_db_name' : 'your_development_db_name' %>
50
+ port: <%= ENV['ENABLE_PSDB'] ? 3305 : ENV.fetch("DB_PORT", 3306) %>
51
+ ```
34
52
 
35
53
  ## Usage
36
54
 
37
55
  First, make sure you have the [`pscale` CLI installed](https://github.com/planetscale/cli#installation). You'll use `pscale` to create a new branch.
38
56
 
39
- 1. `pscale branch switch my-new-branch-name --database my-db-name --create`
40
-
41
- Run this locally, it will create a new branch off of `main`. The `switch` command will update a `.pscale.yml` file to track
57
+ 1. Run this locally, it will create a new branch off of `main`. The `switch` command will update a `.pscale.yml` file to track
42
58
  that this is the branch you want to migrate.
43
59
 
44
- **Tip:** In your database settings. Enable "Automatically copy migration data." Select "Rails/Phoenix" as the migration framework. This will auto copy your `schema_migrations` table between branches.
60
+ ```
61
+ pscale branch switch my-new-branch-name --database my-db-name --create
62
+ ```
63
+
64
+ **Tip:** In your database settings. Enable "Automatically copy migration data." Select "Rails" as the migration framework. This will auto copy your `schema_migrations` table between branches.
45
65
 
46
66
  2. Once your branch is ready, you can then use the `psdb` rake task to connect to your branch and run `db:migrate`.
47
67
 
@@ -68,6 +88,9 @@ pscale deploy-request create database-name my-new-branch-name
68
88
 
69
89
  4. To get your schema change to production, run the deploy request. Then, once it's complete, you can merge your code changes into your `main` branch in git and deploy your application code.
70
90
 
91
+ ## Usage with GitHub Actions
92
+
93
+ See the [GitHub Actions examples](actions-example.md) doc for ways to automate your schema migrations with PlanetScale + Actions.
71
94
 
72
95
  ## Development
73
96
 
@@ -0,0 +1,129 @@
1
+ ## GitHub Actions example
2
+
3
+ To automate branch creation and running migrations, you can setup a branch and run `rails psdb:migrate` from GitHub Actions.
4
+
5
+ Here is a full example workflow that:
6
+ 1. Creates a branch matching the git branch name.
7
+ 2. Runs rails migrations.
8
+ 3. Opens a deploy request if any migrations were run.
9
+ 4. Comments on the pull request with the diff + link to the deploy request.
10
+
11
+ ### Migrate schema workflow
12
+
13
+ This workflow will run on any pull request that is opened with a change to `db/schema.rb`.
14
+
15
+ Secrets needed to be set:
16
+ - `PLANETSCALE_ORG_NAME`
17
+ - `PLANETSCALE_DATABASE_NAME`
18
+ - `PLANETSCALE_SERVICE_TOKEN_ID`
19
+ - `PLANETSCALE_SERVICE_TOKEN`
20
+
21
+ The PlanetScale service token must have permission on the database to create/read development branches, as well as create deploy requests.
22
+
23
+ ```yaml
24
+ name: Run database migrations
25
+ on:
26
+ pull_request:
27
+ branches: [ main ]
28
+ paths:
29
+ - 'db/schema.rb'
30
+
31
+ jobs:
32
+ planetscale:
33
+ permissions:
34
+ pull-requests: write
35
+ contents: read
36
+
37
+ runs-on: ubuntu-latest
38
+ steps:
39
+ - name: checkout
40
+ uses: actions/checkout@v3
41
+ - name: Create a branch
42
+ uses: planetscale/create-branch-action@v4
43
+ id: create_branch
44
+ with:
45
+ org_name: ${{ secrets.PLANETSCALE_ORG_NAME }}
46
+ database_name: ${{ secrets.PLANETSCALE_DATABASE_NAME }}
47
+ branch_name: ${{ github.head_ref }}
48
+ from: main
49
+ check_exists: true
50
+ wait: true
51
+ env:
52
+ PLANETSCALE_SERVICE_TOKEN_ID: ${{ secrets.PLANETSCALE_SERVICE_TOKEN_ID }}
53
+ PLANETSCALE_SERVICE_TOKEN: ${{ secrets.PLANETSCALE_SERVICE_TOKEN }}
54
+ - uses: actions/checkout@v3
55
+ - name: Set up Ruby
56
+ uses: ruby/setup-ruby@v1
57
+ with:
58
+ ruby-version: 3.2.1
59
+ - name: Cache Ruby gems
60
+ uses: actions/cache@v3
61
+ with:
62
+ path: vendor/bundle
63
+ key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}
64
+ restore-keys: |
65
+ ${{ runner.os }}-gems-
66
+ - name: Install dependencies
67
+ run: |
68
+ bundle config --local path vendor/bundle
69
+ bundle config --local deployment true
70
+ bundle install
71
+ - name: Set migration config
72
+ run: |
73
+ echo "org: ${{ secrets.PLANETSCALE_ORG_NAME }}" > .pscale.yml
74
+ echo "database: ${{ secrets.PLANETSCALE_DATABASE_NAME }}" >> .pscale.yml
75
+ echo "branch: ${{ github.head_ref }}" >> .pscale.yml
76
+ - name: Setup pscale
77
+ uses: planetscale/setup-pscale-action@v1
78
+ - name: Run migrations
79
+ run: |
80
+ bundle exec rails psdb:migrate > migration-output.txt
81
+ env:
82
+ PSCALE_SERVICE_TOKEN_ID: ${{ secrets.PLANETSCALE_SERVICE_TOKEN_ID }}
83
+ PSCALE_SERVICE_TOKEN: ${{ secrets.PLANETSCALE_SERVICE_TOKEN }}
84
+ - name: Open DR if migrations
85
+ run: |
86
+ if grep -q "migrated" migration-output.txt; then
87
+ echo "DB_MIGRATED=true" >> $GITHUB_ENV
88
+ if pscale deploy-request create ${{ secrets.PLANETSCALE_DATABASE_NAME }} ${{ github.head_ref }}; then
89
+ cat migration-output.txt
90
+ echo "DR_OPENED=true" >> $GITHUB_ENV
91
+ echo "Deploy request successfully opened"
92
+ else
93
+ echo "Error: Deployment request failed"
94
+ exit 0
95
+ fi
96
+ else
97
+ echo "Did not open a DR since nothing found in migration-output.txt"
98
+ cat migration-output.txt
99
+ exit 0
100
+ fi
101
+ env:
102
+ PLANETSCALE_SERVICE_TOKEN_ID: ${{ secrets.PLANETSCALE_SERVICE_TOKEN_ID }}
103
+ PLANETSCALE_SERVICE_TOKEN: ${{ secrets.PLANETSCALE_SERVICE_TOKEN }}
104
+ - name: Get Deploy Requests
105
+ if: ${{ env.DR_OPENED }}
106
+ env:
107
+ PLANETSCALE_SERVICE_TOKEN_ID: ${{ secrets.PLANETSCALE_SERVICE_TOKEN_ID }}
108
+ PLANETSCALE_SERVICE_TOKEN: ${{ secrets.PLANETSCALE_SERVICE_TOKEN }}
109
+ run: |
110
+ deploy_request_number=$(pscale deploy-request show ${{ secrets.PLANETSCALE_DATABASE_NAME }} ${{ github.head_ref }} -f json | jq -r '.number')
111
+ echo "DEPLOY_REQUEST_NUMBER=$deploy_request_number" >> $GITHUB_ENV
112
+ - name: Comment PR - db migrated
113
+ if: ${{ env.DR_OPENED }}
114
+ env:
115
+ PLANETSCALE_SERVICE_TOKEN_ID: ${{ secrets.PLANETSCALE_SERVICE_TOKEN_ID }}
116
+ PLANETSCALE_SERVICE_TOKEN: ${{ secrets.PLANETSCALE_SERVICE_TOKEN }}
117
+ run: |
118
+ sleep 2
119
+ echo "Deploy request opened: https://app.planetscale.com/${{ secrets.PLANETSCALE_ORG_NAME }}/${{ secrets.PLANETSCALE_DATABASE_NAME }}/deploy-requests/${{ env.DEPLOY_REQUEST_NUMBER }}" >> migration-message.txt
120
+ echo "" >> migration-message.txt
121
+ echo "\`\`\`diff" >> migration-message.txt
122
+ pscale deploy-request diff ${{ secrets.PLANETSCALE_DATABASE_NAME }} ${{ env.DEPLOY_REQUEST_NUMBER }} -f json | jq -r '.[].raw' >> migration-message.txt
123
+ echo "\`\`\`" >> migration-message.txt
124
+ - name: Comment PR - db migrated
125
+ uses: thollander/actions-comment-pull-request@v2
126
+ if: ${{ env.DR_OPENED }}
127
+ with:
128
+ filePath: migration-message.txt
129
+ ```
@@ -46,7 +46,7 @@ namespace :psdb do
46
46
  database = ps_config["database"]
47
47
  branch = ps_config["branch"]
48
48
 
49
- raise "You must have `pscale` installed on your computer" unless command?("pscale").colorize(:red)
49
+ raise "You must have `pscale` installed on your computer".colorize(:red) unless command?("pscale")
50
50
  if branch.blank? || database.blank?
51
51
  raise "Your branch is not properly setup, please switch to a branch by using the CLI.".colorize(:red)
52
52
  end
@@ -88,7 +88,6 @@ namespace :psdb do
88
88
  if branch.blank? || database.blank?
89
89
  raise "Your branch is not properly setup, please switch to a branch by using the CLI."
90
90
  end
91
- raise "Unable to run migrations against the main branch" if branch == "main"
92
91
 
93
92
  config = Rails.configuration.database_configuration[Rails.env][name]
94
93
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module PlanetscaleRails
4
- VERSION = "0.1.2"
4
+ VERSION = "0.1.4"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: planetscale_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Coutermarsh
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2023-03-10 00:00:00.000000000 Z
12
+ date: 2023-07-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: colorize
@@ -60,6 +60,7 @@ files:
60
60
  - LICENSE.txt
61
61
  - README.md
62
62
  - Rakefile
63
+ - actions-example.md
63
64
  - bin/console
64
65
  - bin/setup
65
66
  - lib/Rakefile