From 2c28d57ebb85598fe254e19f57d3a485e534af03 Mon Sep 17 00:00:00 2001 From: Blake Mizerany Date: Tue, 31 Dec 2024 11:32:43 -0800 Subject: [PATCH] README: update style and add comparisons --- .github/workflows/compare.yml | 33 ++++++++- README.md | 128 ++++++++++++++++------------------ action.yml | 8 +-- bar.png | Bin 0 -> 46172 bytes 4 files changed, 97 insertions(+), 72 deletions(-) create mode 100644 bar.png diff --git a/.github/workflows/compare.yml b/.github/workflows/compare.yml index b3d8640..7785c34 100644 --- a/.github/workflows/compare.yml +++ b/.github/workflows/compare.yml @@ -1 +1,32 @@ -on +on: [push, pull_request] + +jobs: + compare-bmizerany-setup-postgres: + runs-on: ubuntu-22.04 + steps: + - name: checkout + uses: actions/checkout@v4 + - name: time bmizerany/setup-postgres + uses: ./ + with: + version: 16.4.0 + compare-postgres-container: + runs-on: ubuntu-22.04 + services: + postgres: + image: postgres:16 + steps: + - name: checkout + uses: actions/checkout@v4 # Checkout for inclusing in rough overall time comparisons + - name: time postgres container + run: echo "See output/time from 'Initialize containers' above" + compare-apt-setup-postgres: + runs-on: ubuntu-22.04 + steps: + - name: apt-get postgres + uses: actions/checkout@v4 + id: postgres + - name: time apt-get action + uses: ikalnytskyi/action-setup-postgres@v7 + with: + postgres-version: 16 diff --git a/README.md b/README.md index d44a01c..db23d22 100644 --- a/README.md +++ b/README.md @@ -1,106 +1,100 @@ # setup-postgres -Fast (really fast), cross-platform, unconfined setup for Postgres in GitHub Actions. +Lightning-fast Postgres setup for GitHub Actions that just works. Cross-platform, unconfined, and ready for all environments GitHub Actions supports. -Works for all OSs and architectures supported by GitHub Actions! +Install Times # Features -- [x] Binaries installed, in PATH, fast! -- [x] Starts postgres in fast-mode*, fast! -- [x] Environment variables setup for use in steps, fast! +- **Pure Speed**: Binary-based installation that gets you running in seconds +- **Zero Friction**: No Docker, no package managers - just what you need +- **Universal**: Works across every OS and architecture GitHub Actions supports +- **No yaml hassle**: Environment variables pre-configured for immediate use in following steps, without intermediate yaml -No Docker, no non-portable package managers. Just the binaries you need, -installed and ready to go, fast! - -# Usage +# Get Started ```yaml steps: - # ... - uses: bmizerany/setup-postgres@v3 - - # Run your migrations, tests, etc. + + # Your steps here - run: psql 'SELECT 1' - run: go test ./... - run: bun test - # ... ``` -That's it! +That's all it takes. No configuration needed. -## Supported OSs and Architectures +# Core Features -This action supports all OSs and architectures that GitHub actions supports; at -the time of writing. +## Version Support -## Supported Versions +The default version is `17.2.0`. -A version may be specified in the form of `X.Y.Z` where `X`, `Y`, and `Z` are -integers. The version must be a valid version of postgres that is available -from the [embedded postgres project](https://github.com/zonkyio/embedded-postgres). +Install any Postgres version using standard semantic versioning (`X.Y.Z`). We pull directly from the embedded-postgres project's verified binaries. -A list of supported versions can be found [here](https://repo1.maven.org/maven2/io/zonky/test/postgres/embedded-postgres-binaries-linux-amd64/). +Browse available versions [here](https://repo1.maven.org/maven2/io/zonky/test/postgres/embedded-postgres-binaries-linux-amd64/). -## Environment variables +Versions can be specified using the version input: -The action will set the following environment variables for subsequent steps: - -| Name | Description | -| --- | --- | -| `PGHOST` | The host to connect to (default: `localhost`) | -| `PGPORT` | The port to connect to (default: `5432`) | -| `PGUSER` | The user to connect as (default: `postgres`) | -| `PGPASSWORD` | The password to connect with (default: `postgres`) | -| `PGDATABASE` | The database to connect to (default: `postgres`) | -| `PGDATA` | The data directory for the running postgres instance | -| `DATABASE_URL` | The DSN that can be used to connect to the database | +```yaml +steps: + - uses: bmizerany/setup-postgres@v3 + with: + version: 16.4.0 +``` -> NOTE: `DATABASE_URL` is in the DSN form (e.g. `dbname=postgres user=postgres -> ...`) which is accepted my most Postgres clients, drivers, ORMs, etc. It -> was chosen over an actual URL because it is more flexible, and easier to -> override settings by simply appending new settings to the string. -> -> Users that want a URL can build one like: `postgres://$PGUSER:$PGPASSWORD@$PGHOST:$PGPORT/$PGDATABASE` +## Environment Configuration +Your workflow steps automatically get these environment variables: +| Variable | Purpose | Default | +| --- | --- | --- | +| `PGHOST` | Connection host | `localhost` | +| `PGPORT` | Connection port | `5432` | +| `PGUSER` | Username | `postgres` | +| `PGPASSWORD` | Password | `postgres` | +| `PGDATABASE` | Target database | `postgres` | +| `PGDATA` | Data directory | *runtime path* | +| `DATABASE_URL` | Connection string | DSN format | + +The `DATABASE_URL` uses DSN format for maximum flexibility. For URL format, construct it like this: +``` +postgres://$PGUSER:$PGPASSWORD@$PGHOST:$PGPORT/$PGDATABASE +``` -## Inputs +## Configuration Options -| Name | Description | Default | +### Inputs +| Name | Purpose | Default | | --- | --- | --- | -| `version` | The version of postgres to install | `17.2.0` | +| `version` | Postgres version | `17.2.0` | -## Outputs +### Outputs +For advanced workflow configuration: -Outputs are provided for use in configuring other steps in a workflow. It is -assumed most users will not need them for normal use, and instead can rely on -the environment variables set by this action. - -| Name | Description | +| Name | Purpose | | --- | --- | -| `dsn` | The DSN that can be used to connect to the database | -| `data` | The data directory for the running postgres instance | - -## Fast-mode +| `dsn` | Database connection string | +| `data` | Postgres data directory | -This action runs postgres in "fast-mode" which is a mode that disables `fsync` -and `full_page_writes`. This is not recommended for production use, but is great -for CI/CD environments where you want to get up and running quickly, and for -tests to run lightning fast. +# Performance Notes -# Credits +This action runs Postgres in fast mode, disabling `fsync` and `full_page_writes`. Perfect for CI/CD, not recommended for production. Your tests will fly. -This is possible thanks to the [embedded postgres project](https://github.com/zonkyio/embedded-postgres) -which provides pre-built binaries for many versions of postgres. Please -consider supporting them if you find this action useful. +# Acknowledgments -This is obviously most possible because of the hard work of the postgres -community. Thank you! +Built on the shoulders of giants: +- [embedded postgres project](https://github.com/zonkyio/embedded-postgres) for their essential binary distributions +- The Postgres community for their foundational work # Contributing -Please open an issue for any feature requests, bugs, or questions. Large PRs -(e.g. new features) should be discussed in an issue first. Small PRs for bug -fixes, typos, etc are welcome without an issue. +We value collaboration: +- Open issues for features and bugs +- Discuss major changes before PR +- Small fixes welcome anytime +- Be kind, or else + +--- -Also, be nice, or else. +*Note: This project thrives because of community support. Consider supporting the embedded postgres project if you find value here.*​​​​​​​​​​​​​​​​ diff --git a/action.yml b/action.yml index 45bb3e0..013ce98 100644 --- a/action.yml +++ b/action.yml @@ -1,13 +1,13 @@ -name: 'Embedded Postgres' -description: 'From zero to testing with embedded postgres in nearly no time, literally.' +name: 'Install Postgres' +description: 'The fastest way to install Postgres for your GitHub Actions.' inputs: version: - description: 'The version of the embedded postgres to install.' + description: 'The version of postgres to install. Use the format ... All parts are required.' required: true default: '17.2.0' outputs: dsn: - description: 'The DSN for connecting to the embedded postgres (e.g. psql "$DSN").' + description: 'The DSN for connecting to the embedded postgres.' data: description: 'The path to the data directory of the embedded postgres.' runs: diff --git a/bar.png b/bar.png new file mode 100644 index 0000000000000000000000000000000000000000..616e9196bae231b0523e1cae8fa4013ebde663c4 GIT binary patch literal 46172 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