Skip to content

Update ci.yml

Update ci.yml #16

Workflow file for this run

name: CI
on:
push:
branches:
- main
- master
tags:
- '*' # also run on any tag push (e.g. v1.0.0)
pull_request:
branches:
- main
- master
jobs:
test:
name: Run Go tests
runs-on: ubuntu-latest
services:
postgres:
image: postgres:15
env:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: postgres
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 5432:5432
env:
POSTGRES_HOST: localhost
POSTGRES_PORT: 5432
POSTGRES_USER: postgres
PGPASSWORD: postgres
PGROLLBACK_CONFIG: config/pgrollback.yaml
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: '1.23'
cache: true
- name: Print Go version
run: go version
- name: Install systray dependency (Linux)
run: sudo apt-get update -y && sudo apt-get install -y libayatana-appindicator3-dev
- name: Create config file for CI
run: |
mkdir -p config
cat > config/pgrollback.yaml << 'EOF'
postgres:
host: localhost
port: 5432
database: postgres
user: postgres
password: postgres
session_timeout: 900s
proxy:
listen_host: localhost
listen_port: 5433
timeout: 60s
keepalive_interval: 300s
logging:
level: info
file: ""
test:
schema: public
context_timeout: 10s
query_timeout: 5s
ping_timeout: 3s
EOF
- name: Run unit tests
run: go test ./...
build-windows:
name: Build pgrollback (Windows)
runs-on: windows-latest
needs: test
if: startsWith(github.ref, 'refs/tags/') # only build when the commit is a tag
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: '1.23'
cache: true
- name: Build pgrollback
run: go build -o bin/pgrollback.exe ./cmd/pgrollback
- name: Upload binary artifact
uses: actions/upload-artifact@v4
with:
name: pgrollback-windows-amd64
path: bin/pgrollback.exe
build-windows-cross:
name: Build pgrollback (Windows cross-compile on Linux)
runs-on: ubuntu-latest
needs: test
if: startsWith(github.ref, 'refs/tags/')
steps:
- uses: actions/checkout@v4
- name: Install mingw-w64 (Windows cross-compiler)
run: sudo apt-get update -y && sudo apt-get install -y gcc-mingw-w64
- uses: actions/setup-go@v5
with:
go-version: '1.23'
cache: true
- name: Install systray dependency (Linux)
run: sudo apt-get update -y && sudo apt-get install -y libayatana-appindicator3-dev
- name: Build pgrollback.exe (cross, CGO)
env:
CGO_ENABLED: 1
GOOS: windows
GOARCH: amd64
CC: x86_64-w64-mingw32-gcc
run: |
mkdir -p bin
go build -o bin/pgrollback.exe ./cmd/pgrollback
- name: Upload binary artifact (cross)
uses: actions/upload-artifact@v4
with:
name: pgrollback-windows-amd64-cross
path: bin/pgrollback.exe
build-linux:
name: Build pgrollback linux binary
runs-on: ubuntu-latest
needs: test
if: startsWith(github.ref, 'refs/tags/') # only build when the commit is a tag
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: '1.23'
cache: true
- name: Install systray dependency (Linux)
run: sudo apt-get update -y && sudo apt-get install -y libayatana-appindicator3-dev
- name: Build pgrollback
run: go build -o bin/pgrollback ./cmd/pgrollback
- name: Upload binary artifact
uses: actions/upload-artifact@v4
with:
name: pgrollback-linux-amd64
path: bin/pgrollback
release:
name: Create Release and upload binaries
runs-on: ubuntu-latest
needs: [build-linux, build-windows]
if: startsWith(github.ref, 'refs/tags/')
permissions:
contents: write
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Download Linux binary
uses: actions/download-artifact@v4
with:
name: pgrollback-linux-amd64
path: artifacts/pgrollback-linux-amd64
- name: Download Windows binary
uses: actions/download-artifact@v4
with:
name: pgrollback-windows-amd64
path: artifacts/pgrollback-windows-amd64
- name: Rename binaries with tag and OS
run: |
set -e
TAG="${GITHUB_REF#refs/tags/}"
mkdir -p release
LINUX_BIN="artifacts/pgrollback-linux-amd64/pgrollback"
WIN_BIN="artifacts/pgrollback-windows-amd64/pgrollback.exe"
# fallback se o upload preservou "bin/"
[ -f "artifacts/pgrollback-linux-amd64/bin/pgrollback" ] && LINUX_BIN="artifacts/pgrollback-linux-amd64/bin/pgrollback"
[ -f "artifacts/pgrollback-windows-amd64/bin/pgrollback.exe" ] && WIN_BIN="artifacts/pgrollback-windows-amd64/bin/pgrollback.exe"
ls -la artifacts/pgrollback-linux-amd64 || true
ls -la artifacts/pgrollback-windows-amd64 || true
mv "$LINUX_BIN" "release/pgrollback-${TAG}-linux-amd64"
mv "$WIN_BIN" "release/pgrollback-${TAG}-windows-amd64.exe"
ls -la release/
- name: Create Release and upload assets
uses: softprops/action-gh-release@v2
with:
files: release/*
generate_release_notes: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}