Skip to content

Commit fda37a1

Browse files
authored
Merge branch 'master' into saraj/ctx
2 parents 1c8d7ac + 7084132 commit fda37a1

23 files changed

Lines changed: 331 additions & 216 deletions

.github/workflows/golang.yml

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
name: golang
2+
on:
3+
push:
4+
branches:
5+
- master
6+
pull_request:
7+
jobs:
8+
test:
9+
strategy:
10+
fail-fast: true
11+
matrix:
12+
go-version: [ '1.13', '1.14', '1.15', '1.16', '1.17', '1.18', '1.19', '1.20']
13+
runs-on: ubuntu-latest
14+
steps:
15+
- name: checkout
16+
uses: actions/checkout@v3
17+
- name: setup-go
18+
uses: actions/setup-go@v4
19+
with:
20+
go-version: ${{ matrix.go-version }}
21+
cache: true
22+
cache-dependency-path: go.sum
23+
- name: go build
24+
run: go build -o ./bin/sql-migrate ./sql-migrate && ./bin/sql-migrate --help
25+
- name: go test
26+
run: go test ./...
27+
lint:
28+
runs-on: ubuntu-latest
29+
steps:
30+
- name: checkout
31+
uses: actions/checkout@v3
32+
- name: setup-go
33+
uses: actions/setup-go@v4
34+
with:
35+
go-version: '1.20'
36+
cache: true
37+
cache-dependency-path: go.sum
38+
- name: golangci-lint
39+
uses: golangci/golangci-lint-action@v3
40+
with:
41+
version: v1.52.2
42+
- name: go mod tidy
43+
run: go mod tidy
44+
- name: check for any changes
45+
run: |
46+
[[ $(git status --porcelain) == "" ]] || (echo "changes detected" && exit 1)
47+
integration:
48+
needs:
49+
- test
50+
- lint
51+
runs-on: ubuntu-latest
52+
strategy:
53+
fail-fast: true
54+
matrix:
55+
go-version: [ '1.13', '1.14', '1.15', '1.16', '1.17', '1.18', '1.19', '1.20']
56+
services:
57+
mysql:
58+
image: mysql:8.0
59+
env:
60+
MYSQL_ALLOW_EMPTY_PASSWORD: '1'
61+
MYSQL_ROOT_PASSWORD: ''
62+
MYSQL_DATABASE: 'test'
63+
ports:
64+
- 3306:3306
65+
options: >-
66+
--health-cmd="mysqladmin ping"
67+
--health-interval=10s
68+
--health-timeout=5s
69+
--health-retries=3
70+
postgres:
71+
image: postgres:15
72+
env:
73+
POSTGRES_PASSWORD: 'password'
74+
ports:
75+
- 5432:5432
76+
options: >-
77+
--health-cmd pg_isready
78+
--health-interval 10s
79+
--health-timeout 5s
80+
--health-retries 5
81+
env:
82+
MYSQL_HOST: '127.0.0.1'
83+
PGHOST: '127.0.0.1'
84+
PGUSER: 'postgres'
85+
PGPASSWORD: 'password'
86+
steps:
87+
- name: checkout
88+
uses: actions/checkout@v3
89+
- name: setup-go
90+
uses: actions/setup-go@v4
91+
with:
92+
go-version: ${{ matrix.go-version }}
93+
cache: true
94+
cache-dependency-path: go.sum
95+
- name: setup databases
96+
run: |
97+
mysql --user=root -e 'CREATE DATABASE IF NOT EXISTS test;'
98+
mysql --user=root -e 'CREATE DATABASE IF NOT EXISTS test_env;'
99+
psql -U postgres -c 'CREATE DATABASE test;'
100+
- name: install sql-migrate
101+
run: go install ./...
102+
- name: postgres
103+
run: bash ./test-integration/postgres.sh
104+
- name: mysql
105+
run: bash ./test-integration/mysql.sh
106+
- name: mysql-flag
107+
run: bash ./test-integration/mysql-flag.sh
108+
- name: mysql-env
109+
run: bash ./test-integration/mysql-env.sh
110+
- name: sqlite
111+
run: bash ./test-integration/sqlite.sh

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,5 @@
55

66
/sql-migrate/test.db
77
/test.db
8+
.vscode/
9+
bin/

.golangci.yaml

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
linters-settings:
2+
gocritic:
3+
disabled-checks:
4+
- ifElseChain
5+
goimports:
6+
local-prefixes: github.com/rubenv/sql-migrate
7+
govet:
8+
enable-all: true
9+
disable:
10+
- fieldalignment
11+
depguard:
12+
list-type: blacklist
13+
include-go-root: true
14+
include-go-std-lib: true
15+
exhaustive:
16+
default-signifies-exhaustive: true
17+
nolintlint:
18+
allow-unused: false
19+
allow-leading-space: false
20+
allow-no-explanation:
21+
- depguard
22+
require-explanation: true
23+
require-specific: true
24+
revive:
25+
enable-all-rules: false
26+
rules:
27+
- name: atomic
28+
- name: blank-imports
29+
- name: bool-literal-in-expr
30+
- name: call-to-gc
31+
- name: constant-logical-expr
32+
- name: context-as-argument
33+
- name: context-keys-type
34+
- name: dot-imports
35+
- name: duplicated-imports
36+
- name: empty-block
37+
- name: empty-lines
38+
- name: error-naming
39+
- name: error-return
40+
- name: error-strings
41+
- name: errorf
42+
- name: exported
43+
- name: identical-branches
44+
- name: imports-blacklist
45+
- name: increment-decrement
46+
- name: indent-error-flow
47+
- name: modifies-parameter
48+
- name: modifies-value-receiver
49+
- name: package-comments
50+
- name: range
51+
- name: range-val-address
52+
- name: range-val-in-closure
53+
- name: receiver-naming
54+
- name: string-format
55+
- name: string-of-int
56+
- name: struct-tag
57+
- name: time-naming
58+
- name: unconditional-recursion
59+
- name: unexported-naming
60+
- name: unexported-return
61+
- name: superfluous-else
62+
- name: unreachable-code
63+
- name: var-declaration
64+
- name: waitgroup-by-value
65+
- name: unused-receiver
66+
- name: unnecessary-stmt
67+
- name: unused-parameter
68+
run:
69+
tests: true
70+
timeout: 1m
71+
linters:
72+
disable-all: true
73+
enable:
74+
- asciicheck
75+
- depguard
76+
- errcheck
77+
- exhaustive
78+
- gocritic
79+
- gofmt
80+
- gofumpt
81+
- goimports
82+
- govet
83+
- ineffassign
84+
- nolintlint
85+
- revive
86+
- staticcheck
87+
- typecheck
88+
- unused
89+
- whitespace
90+
- errorlint
91+
- gosimple
92+
- unparam
93+
issues:
94+
exclude:
95+
- 'declaration of "err" shadows declaration at' # Allow shadowing of `err` because it's so common
96+
- 'error-strings: error strings should not be capitalized or end with punctuation or a newline'
97+
max-same-issues: 10000
98+
max-issues-per-linter: 10000

.travis.yml

Lines changed: 0 additions & 33 deletions
This file was deleted.

Makefile

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
.PHONY: test lint build
2+
3+
test:
4+
go test ./...
5+
6+
lint:
7+
golangci-lint run --fix --config .golangci.yaml
8+
9+
build:
10+
mkdir -p bin
11+
go build -o ./bin/sql-migrate ./sql-migrate

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
* Up/down migrations to allow rollback
1515
* Supports multiple database types in one project
1616
* Works great with other libraries such as [sqlx](https://jmoiron.github.io/sqlx/)
17+
* Supported on go1.13+
1718

1819
## Installation
1920

bindata_test.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import (
1111
func bindata_read(data []byte, name string) ([]byte, error) {
1212
gz, err := gzip.NewReader(bytes.NewBuffer(data))
1313
if err != nil {
14-
return nil, fmt.Errorf("Read %q: %v", name, err)
14+
return nil, fmt.Errorf("Read %q: %w", name, err)
1515
}
1616

1717
var buf bytes.Buffer
@@ -21,7 +21,7 @@ func bindata_read(data []byte, name string) ([]byte, error) {
2121
}
2222

2323
if err != nil {
24-
return nil, fmt.Errorf("Read %q: %v", name, err)
24+
return nil, fmt.Errorf("Read %q: %w", name, err)
2525
}
2626

2727
return buf.Bytes(), nil
@@ -68,7 +68,7 @@ func test_migrations_2_record_sql() ([]byte, error) {
6868
// It returns an error if the asset could not be found or
6969
// could not be loaded.
7070
func Asset(name string) ([]byte, error) {
71-
canonicalName := strings.Replace(name, "\\", "/", -1)
71+
canonicalName := strings.ReplaceAll(name, "\\", "/")
7272
if f, ok := _bindata[canonicalName]; ok {
7373
return f()
7474
}
@@ -108,7 +108,7 @@ var _bindata = map[string]func() ([]byte, error){
108108
func AssetDir(name string) ([]string, error) {
109109
node := _bintree
110110
if len(name) != 0 {
111-
canonicalName := strings.Replace(name, "\\", "/", -1)
111+
canonicalName := strings.ReplaceAll(name, "\\", "/")
112112
pathList := strings.Split(canonicalName, "/")
113113
for _, p := range pathList {
114114
node = node.Children[p]
@@ -133,8 +133,8 @@ type _bintree_t struct {
133133
}
134134

135135
var _bintree = &_bintree_t{nil, map[string]*_bintree_t{
136-
"test-migrations": &_bintree_t{nil, map[string]*_bintree_t{
137-
"1_initial.sql": &_bintree_t{test_migrations_1_initial_sql, map[string]*_bintree_t{}},
138-
"2_record.sql": &_bintree_t{test_migrations_2_record_sql, map[string]*_bintree_t{}},
136+
"test-migrations": {nil, map[string]*_bintree_t{
137+
"1_initial.sql": {test_migrations_1_initial_sql, map[string]*_bintree_t{}},
138+
"2_record.sql": {test_migrations_2_record_sql, map[string]*_bintree_t{}},
139139
}},
140140
}}

go.mod

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,6 @@ require (
2929
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c
3030
gopkg.in/yaml.v2 v2.4.0
3131
)
32+
33+
// Later releases use unsafe.Slice, which is unsupported in go1.16
34+
replace golang.org/x/sys => golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc

go.sum

Lines changed: 1 addition & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -540,64 +540,8 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ
540540
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
541541
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 h1:uVc8UZUe6tr40fFVnUP5Oj+veunVezqYl9z7DYw9xzw=
542542
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
543+
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc h1:MeuS1UDyZyFH++6vVy44PuufTeFF0d0nfI6XB87YGSk=
543544
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
544-
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
545-
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
546-
golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
547-
golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
548-
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
549-
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
550-
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
551-
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
552-
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
553-
golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
554-
golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
555-
golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
556-
golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
557-
golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
558-
golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
559-
golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
560-
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
561-
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
562-
golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
563-
golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
564-
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
565-
golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
566-
golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
567-
golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
568-
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
569-
golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
570-
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
571-
golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
572-
golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
573-
golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
574-
golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
575-
golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
576-
golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
577-
golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
578-
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
579-
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
580-
golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
581-
golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
582-
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
583-
golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
584-
golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
585-
golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
586-
golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
587-
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
588-
golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
589-
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
590-
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
591-
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
592-
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
593-
golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
594-
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
595-
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
596-
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
597-
golang.org/x/sys v0.0.0-20221013171732-95e765b1cc43/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
598-
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
599-
golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18=
600-
golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
601545
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
602546
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
603547
golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc=

0 commit comments

Comments
 (0)