Compare commits
3
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8a0f5c45e7 | ||
|
|
9f229dde97 | ||
|
|
384a4a94d1 |
@@ -0,0 +1,26 @@
|
||||
# Vet and test the package. This is a pure Go library -- no build
|
||||
# step, no services -- so CI just runs `go vet` then `go test` on
|
||||
# every push to main and every pull request.
|
||||
|
||||
name: CI
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
pull_request:
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: golang:1.21-alpine
|
||||
steps:
|
||||
- name: Install checkout dependencies
|
||||
run: apk add --no-cache git nodejs
|
||||
- uses: actions/checkout@v4
|
||||
- name: go vet
|
||||
run: go vet ./...
|
||||
- name: go test
|
||||
run: go test ./...
|
||||
@@ -1,47 +0,0 @@
|
||||
name: Test
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches:
|
||||
- develop
|
||||
push:
|
||||
branches:
|
||||
- develop
|
||||
|
||||
jobs:
|
||||
test:
|
||||
name: Test
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Set up Go
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: ^1.21.0
|
||||
|
||||
- name: Display Go version
|
||||
run: go version
|
||||
|
||||
- name: Install dependencies
|
||||
run: go get
|
||||
|
||||
- name: Run tests
|
||||
run: go test -v
|
||||
|
||||
notify:
|
||||
name: Send Discord workflow notification
|
||||
runs-on: ubuntu-latest
|
||||
needs: test
|
||||
steps:
|
||||
- name: Send notification
|
||||
uses: annybs/action-notify-discord@v1
|
||||
if: ${{ always() }}
|
||||
with:
|
||||
repository: ${{ github.repository }}
|
||||
result: ${{ needs.test.result }}
|
||||
run-id: ${{ github.run_id }}
|
||||
run-number: ${{ github.run_number }}
|
||||
webhook-url: ${{ secrets.DISCORD_WEBHOOK }}
|
||||
workflow: ${{ github.workflow }}
|
||||
@@ -1,3 +1,3 @@
|
||||
module gogs.home.aneur.in/go/version
|
||||
module code.aneur.in/go/version
|
||||
|
||||
go 1.21
|
||||
|
||||
+18
-5
@@ -4,11 +4,14 @@ import (
|
||||
"sort"
|
||||
)
|
||||
|
||||
// AfterPatchCallback is called after each time a migration is successfully applied (up) or reverted (down).
|
||||
type AfterPatchCallback func(applied, next *Version)
|
||||
|
||||
// Migration maps provide a simple way to store and run versioned 'patch' functions.
|
||||
type Migration map[string]Patch
|
||||
|
||||
// Down reverts all patches in reverse version order.
|
||||
func (m Migration) Down(after func(*Version)) error {
|
||||
func (m Migration) Down(after AfterPatchCallback) error {
|
||||
versions, err := m.Versions()
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -22,7 +25,12 @@ func (m Migration) Down(after func(*Version)) error {
|
||||
}
|
||||
|
||||
if after != nil {
|
||||
after(v)
|
||||
var next *Version
|
||||
if i > 1 {
|
||||
next = versions[i-1]
|
||||
}
|
||||
|
||||
after(v, next)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,20 +55,25 @@ func (m Migration) Match(constraints ...*Constraint) (Migration, error) {
|
||||
}
|
||||
|
||||
// Up executes all patches in version order.
|
||||
func (m Migration) Up(after func(*Version)) error {
|
||||
func (m Migration) Up(after AfterPatchCallback) error {
|
||||
versions, err := m.Versions()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, v := range versions {
|
||||
for i, v := range versions {
|
||||
patch := m[v.Text]
|
||||
if err := patch.Up(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if after != nil {
|
||||
after(v)
|
||||
var next *Version
|
||||
if i < len(versions)-1 {
|
||||
next = versions[i+1]
|
||||
}
|
||||
|
||||
after(v, next)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user