-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
providers/sequelize: sequelize+tf example project
- Loading branch information
Showing
15 changed files
with
5,748 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
name: Sequelize + Terraform | ||
on: | ||
push: | ||
branches: | ||
- master | ||
paths: | ||
- .github/workflows/providers-sequelize-terraform.yaml | ||
- 'providers/sequelize-terraform/migrations/*' | ||
pull_request: | ||
paths: | ||
- 'providers/sequelize-terraform/migrations/*' | ||
- .github/workflows/providers-sequelize-terraform.yaml | ||
# Permissions to write comments on the pull request. | ||
permissions: | ||
contents: read | ||
pull-requests: write | ||
jobs: | ||
atlas: | ||
services: | ||
# Spin up a mysql:8 container to be used as the dev-database for analysis. | ||
mysql: | ||
image: mysql:8 | ||
env: | ||
MYSQL_DATABASE: dev | ||
MYSQL_ROOT_PASSWORD: pass | ||
ports: | ||
- 3306:3306 | ||
options: >- | ||
--health-cmd "mysqladmin ping -ppass" | ||
--health-interval 10s | ||
--health-start-period 10s | ||
--health-timeout 5s | ||
--health-retries 10 | ||
runs-on: ubuntu-latest | ||
steps: | ||
- uses: actions/checkout@v4 | ||
with: | ||
fetch-depth: 0 | ||
- uses: ariga/setup-atlas@v0 | ||
with: | ||
cloud-token: ${{ secrets.ATLAS_CLOUD_TOKEN }} | ||
- uses: ariga/atlas-action/migrate/lint@v1 | ||
with: | ||
dir: 'file://providers/sequelize/migrations' | ||
dir-name: 'sequelize' | ||
dev-url: 'mysql://root:pass@mysql:3306/dev' | ||
env: | ||
GITHUB_TOKEN: ${{ github.token }} | ||
- uses: ariga/atlas-action/migrate/push@v1 | ||
if: github.ref == 'refs/heads/master' | ||
with: | ||
dir: 'file://atlashcl/gcp-secrets/migrations' | ||
dir-name: 'sequelize' | ||
dev-url: 'mysql://root:pass@mysql:3306/dev' | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
# sequelize-terraform | ||
|
||
e2e sequelize schema management | ||
|
||
### Desired state | ||
|
||
The desired state for this application is defined as a [Sequelize](https://sequelize.org/) schema definition which | ||
resides in the [`model`](./model) directory. | ||
|
||
The desired state is loaded into the `atlas.hcl` file using an `external_schema` data source: | ||
|
||
```hcl | ||
data "external_schema" "sequelize" { | ||
program = [ | ||
"npx", | ||
"@ariga/atlas-provider-sequelize", | ||
"load", | ||
"--path", "./model", | ||
"--dialect", "mysql", // mariadb | postgres | sqlite | mssql | ||
] | ||
} | ||
``` | ||
|
||
### Continuous integration | ||
|
||
|
||
|
||
#### Planning new migrations | ||
|
||
1. Make a change to the desired state in the [`model`](./model) directory. | ||
2. Run `atlas migrate diff --env sequelize` to see the migration plan. | ||
|
||
### |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
data "external_schema" "sequelize" { | ||
program = [ | ||
"npx", | ||
"@ariga/atlas-provider-sequelize", | ||
"load", | ||
"--path", "./model", | ||
"--dialect", "mysql", // mariadb | postgres | sqlite | mssql | ||
] | ||
} | ||
|
||
env "sequelize" { | ||
src = data.external_schema.sequelize.url | ||
dev = "docker://mysql/8/dev" | ||
migration { | ||
dir = "file://migrations" | ||
} | ||
format { | ||
migrate { | ||
diff = "{{ sql . \" \" }}" | ||
} | ||
} | ||
} |
20 changes: 20 additions & 0 deletions
20
providers/sequelize-terraform/migrations/20231130133839.sql
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
-- Create "Users" table | ||
CREATE TABLE `Users` ( | ||
`id` int NOT NULL AUTO_INCREMENT, | ||
`name` varchar(255) NOT NULL, | ||
`email` varchar(255) NOT NULL, | ||
`createdAt` datetime NOT NULL, | ||
`updatedAt` datetime NOT NULL, | ||
PRIMARY KEY (`id`) | ||
) CHARSET utf8mb4 COLLATE utf8mb4_0900_ai_ci; | ||
-- Create "Tasks" table | ||
CREATE TABLE `Tasks` ( | ||
`id` int NOT NULL AUTO_INCREMENT, | ||
`complete` bool NULL DEFAULT 0, | ||
`createdAt` datetime NOT NULL, | ||
`updatedAt` datetime NOT NULL, | ||
`userID` int NOT NULL, | ||
PRIMARY KEY (`id`), | ||
INDEX `userID` (`userID`), | ||
CONSTRAINT `Tasks_ibfk_1` FOREIGN KEY (`userID`) REFERENCES `Users` (`id`) ON UPDATE CASCADE ON DELETE NO ACTION | ||
) CHARSET utf8mb4 COLLATE utf8mb4_0900_ai_ci; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
-- Modify "Users" table | ||
ALTER TABLE `Users` ADD COLUMN `hobby` varchar(255) NOT NULL; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
h1:pwDJzAI2IQmaCd7lUwhKRPj/nYuN8O+eGE7BbFBkcus= | ||
20231130133839.sql h1:MmMtplD4lbMmtYQzORgEcktY7yiMORWIbMao9BrvSP8= | ||
20231130144552.sql h1:ZCugFXvthlNK3gDP3X2qe7TSsiQRfnn3DNyEm+abDBA= |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
'use strict'; | ||
module.exports = (sequelize, DataTypes) => { | ||
const Task = sequelize.define('Task', { | ||
complete: { | ||
type: DataTypes.BOOLEAN, | ||
defaultValue: false, | ||
} | ||
}); | ||
|
||
Task.associate = (models) => { | ||
Task.belongsTo(models.User, { | ||
foreignKey: { | ||
name: 'userID', | ||
allowNull: false | ||
}, | ||
as: 'tasks' | ||
}); | ||
}; | ||
|
||
return Task; | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
'use strict'; | ||
module.exports = function(sequelize, DataTypes) { | ||
const User = sequelize.define('User', { | ||
name: { | ||
type: DataTypes.STRING, | ||
allowNull: false | ||
}, | ||
email: { | ||
type: DataTypes.STRING, | ||
allowNull: false, | ||
validate: { | ||
isEmail: true | ||
}, | ||
}, | ||
hobby: { | ||
type: DataTypes.STRING, | ||
allowNull: false | ||
}, | ||
}); | ||
|
||
User.associate = (models) => { | ||
User.hasMany(models.Task, { | ||
foreignKey: { | ||
name: 'userID', | ||
allowNull: false | ||
}, | ||
as: 'tasks' | ||
}); | ||
}; | ||
|
||
return User; | ||
}; |
Oops, something went wrong.