0
0
Fork 0
mirror of https://github.com/tj-actions/pg-dump.git synced 2024-12-20 01:18:49 +00:00
This commit is contained in:
Tonye Jack 2023-09-08 02:05:18 +00:00 committed by GitHub
commit 6c0706f39d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 140 additions and 3 deletions

View file

@ -9,9 +9,72 @@ on:
- main
jobs:
shellcheck:
name: Run shellcheck
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4
- name: shellcheck
uses: reviewdog/action-shellcheck@v1.19
test-postgresql:
name: Test pg_dump with PostgreSQL version
runs-on: ${{ matrix.platform }}
strategy:
fail-fast: false
matrix:
platform: [ubuntu-latest, windows-latest, macos-latest, macos-11, windows-2022]
postgresql_version: [12, 14, 15]
services:
postgres:
image: postgres:${{ matrix.postgresql_version }}
env:
POSTGRES_USER: test_user
POSTGRES_PASSWORD: test_user_password
POSTGRES_DB: testdb
ports:
- 5432:5432
# needed because the postgres container does not provide a healthcheck
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
persist-credentials: false # otherwise, the token used is the GITHUB_TOKEN, instead of your personal token
- name: Run pg_dump
uses: ./
with:
database_url: "postgres://test_user:test_user_password@localhost:5432/testdb"
postgresql_version: ${{ matrix.postgresql_version }}
path: "backups/${{ matrix.postgresql_version }}/backup.sql"
- name: Check changes to the backup file.
id: changed_backup
if: matrix.platform == 'ubuntu-latest'
uses: tj-actions/verify-changed-files@v16
with:
files: backups/${{ matrix.postgresql_version }}/backup.sql
- name: Commit changes to backup file.
if: steps.changed_backup.outputs.files_changed == 'true' && matrix.platform == 'ubuntu-latest'
run: |
git config --local user.email "github-actions[bot]@users.noreply.github.com"
git config --local user.name "github-actions[bot]"
git add backups/${{ matrix.postgresql_version }}/backup.sql
git commit -m "Auto updated backup.sql."
- name: Push changes
if: steps.changed_backup.outputs.files_changed == 'true' && matrix.platform == 'ubuntu-latest'
uses: ad-m/github-push-action@master
with:
github_token: ${{ secrets.PAT_TOKEN }}
branch: ${{ github.head_ref }}
test:
runs-on: ubuntu-latest
name: Test postgres-restore
name: Test pg_dump
services:
postgres:
image: postgres:9.6.24

View file

@ -2,6 +2,9 @@ name: pg-dump
description: Run pg_dump to generate a backup
author: tj-actions
inputs:
postgresql_version:
description: 'Version of PostgreSQL. e.g 15'
required: false
database_url:
description: 'Database URL'
required: true
@ -17,9 +20,15 @@ runs:
using: 'composite'
steps:
- run: |
mkdir -p $(dirname "${{ inputs.path }}")
pg_dump ${{ inputs.options }} -d "${{ inputs.database_url }}" > "${{ inputs.path }}"
bash $GITHUB_ACTION_PATH/entrypoint.sh
shell: bash
env:
# INPUT_<VARIABLE_NAME> is not available in Composite run steps
# https://github.community/t/input-variable-name-is-not-available-in-composite-run-steps/127611
INPUT_POSTGRESQL_VERSION: ${{ inputs.postgresql_version }}
INPUT_PATH: ${{ inputs.path }}
INPUT_DATABASE_URL: ${{ inputs.database_url }}
INPUT_OPTIONS: ${{ inputs.options }}
branding:
icon: hard-drive
color: white

65
entrypoint.sh Executable file
View file

@ -0,0 +1,65 @@
#!/usr/bin/env bash
set -euo pipefail
echo "::group::pg-dump"
echo "Checking if the output directory exists..."
if [ ! -d "$(dirname "$INPUT_PATH")" ]; then
echo "The output directory does not exist. Creating it..."
mkdir -p "$(dirname "$INPUT_PATH")"
echo "Created the output directory"
else
echo "The output directory already exists"
fi
if [[ -n "$INPUT_POSTGRESQL_VERSION" ]]; then
echo "Verifying version"
# Check if the input is an integer
if ! [[ "$INPUT_POSTGRESQL_VERSION" =~ ^[0-9]+$ ]]; then
echo "Error: $INPUT_POSTGRESQL_VERSION is not a valid integer."
exit 1
fi
# Check if the input is between 10 and 15 (inclusive)
if (( INPUT_POSTGRESQL_VERSION < 10 || INPUT_POSTGRESQL_VERSION > 15 )); then
echo "Error: $INPUT_POSTGRESQL_VERSION is not between 10 and 15 (inclusive)."
exit 1
fi
echo "Validated postgresql version: $INPUT_POSTGRESQL_VERSION"
echo "Installing postgresql..."
if [[ "$(uname -s)" == "Linux" ]]; then
sudo apt-get update
sudo apt-get install -y "postgresql-$INPUT_POSTGRESQL_VERSION"
elif [[ "$(uname -s)" == "NT"* ]]; then
choco install postgresql --version="$INPUT_POSTGRESQL_VERSION" -y
elif [[ "$(uname -s)" == "Darwin" ]]; then
brew update
brew install "postgresql@$INPUT_POSTGRESQL_VERSION"
else
echo "Unsupported OS"
exit 1
fi
if [[ "$(uname -s)" == "NT"* ]]; then
echo "/Program Files/PostgreSQL/15/bin" >> "$GITHUB_PATH"
else
echo "/usr/lib/postgresql/15/bin" >> "$GITHUB_PATH"
fi
echo "Installed postgresql"
fi
echo "Running pg_dump..."
# shellcheck disable=SC2086
pg_dump $INPUT_OPTIONS -d "$INPUT_DATABASE_URL" > "$INPUT_PATH"
echo "Complete"
echo "::endgroup::"