-
-
Notifications
You must be signed in to change notification settings - Fork 13
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* run tests on pg13 * print pg logs to debug * always * fetch schema_name if its null * stop logging postgres logs * newline * re-enable schema check workflow * add pg13 to publish workflow * update readme * echo schema diff * only use current schema query on pg13 * fix lint issue
- Loading branch information
Showing
5 changed files
with
218 additions
and
158 deletions.
There are no files selected for viewing
309 changes: 154 additions & 155 deletions
309
.github/workflows/check-pg_analytics-schema-upgrade.yml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,155 +1,154 @@ | ||
# TODO: Uncomment once we have PG13 support, which is required for pg-schema-diff | ||
# # workflows/check-pg_analytics-schema-upgrade.yml | ||
# # | ||
# # Check pg_analytics Schema Upgrade pg_analytics | ||
# # Determine if a commit introduces an extension schema change for pg_analytics. | ||
|
||
# name: Check pg_analytics Schema Upgrade | ||
|
||
# on: | ||
# pull_request: | ||
# types: [opened, synchronize, reopened, ready_for_review] | ||
# branches: | ||
# - dev | ||
# - main | ||
# paths: | ||
# - ".github/workflows/check-pg_analytics-schema-upgrade.yml" | ||
# - "pg_analytics/**" | ||
# - "!pg_analytics/README.md" | ||
# workflow_dispatch: | ||
|
||
# # Required to post a comment to the PR | ||
# permissions: | ||
# pull-requests: write | ||
|
||
# concurrency: | ||
# group: check-pg_analytics-schema-upgrade-${{ github.head_ref || github.ref }} | ||
# cancel-in-progress: true | ||
|
||
# jobs: | ||
# check-pg_analytics-schema-upgrade: | ||
# name: Post Schema Change to PR | ||
# runs-on: depot-ubuntu-latest-8 | ||
# if: github.event.pull_request.draft == false | ||
# env: | ||
# pg_version: 13 # Required by pg-schema-diff | ||
|
||
# steps: | ||
# - name: Checkout Git Repository | ||
# uses: actions/checkout@v4 | ||
# with: | ||
# fetch-depth: 0 # Fetch the entire history | ||
|
||
# - name: Install Rust | ||
# uses: dtolnay/rust-toolchain@stable | ||
|
||
# # Caches from base branches are available to PRs, but not across unrelated branches, so we only | ||
# # save the cache on the 'dev' branch, but load it on all branches. | ||
# - name: Install Rust Cache | ||
# uses: Swatinem/rust-cache@v2 | ||
# with: | ||
# prefix-key: "v1" | ||
# shared-key: ${{ runner.os }}-rust-cache-pg_analytics-${{ HashFiles('Cargo.lock') }} | ||
# cache-targets: true | ||
# cache-on-failure: true | ||
# cache-all-crates: true | ||
# save-if: ${{ github.ref == 'refs/heads/dev' }} | ||
|
||
# - name: Install & Configure Supported PostgreSQL Version | ||
# run: | | ||
# wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - | ||
# sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list' | ||
# sudo apt-get update && sudo apt-get install -y postgresql-${{ env.pg_version }} postgresql-server-dev-${{ env.pg_version }} | ||
# sudo chown -R $(whoami) /usr/share/postgresql/${{ env.pg_version }}/ /usr/lib/postgresql/${{ env.pg_version }}/ /var/lib/postgresql/${{ env.pg_version }}/ | ||
# rustup component add llvm-tools-preview | ||
# echo "/usr/lib/postgresql/${{ env.pg_version }}/bin" >> $GITHUB_PATH | ||
|
||
# - name: Install pg-schema-diff and its Required Dependencies | ||
# run: | | ||
# sudo apt install clang llvm diffutils | ||
# cargo install --git https://github.com/zombodb/pg-schema-diff.git | ||
|
||
# - name: Extract pgrx Version & Install cargo-pgrx | ||
# run: | | ||
# PGRX_VERSION=$(cargo tree --depth 1 -i pgrx -p pg_analytics | head -n 1 | cut -f2 -dv) | ||
# cargo install -j $(nproc) --locked cargo-pgrx --version ${PGRX_VERSION} | ||
# cargo pgrx init "--pg${{ env.pg_version }}=/usr/lib/postgresql/${{ env.pg_version }}/bin/pg_config" | ||
|
||
# # Save the pgrx version for comparison later | ||
# echo "FIRST_PGRX_VERSION=${PGRX_VERSION}" >> $GITHUB_ENV | ||
|
||
# - name: Generate Schema from this git rev | ||
# run: cargo pgrx schema -p pg_analytics pg${{ env.pg_version }} > ~/this.sql | ||
|
||
# - name: Switch to Base git rev and Generate Schema Again | ||
# run: | | ||
# # Switch to the base git rev | ||
# git checkout . | ||
# git checkout ${{ github.event.pull_request.base.ref }} | ||
|
||
# # See if we need a different cargo-pgrx and install it if so | ||
# THIS_PGRX_VERSION=$(cargo tree --depth 1 -i pgrx -p pg_analytics | head -n 1 | cut -f2 -dv) | ||
# if [[ "${THIS_PGRX_VERSION}" != "${FIRST_PGRX_VERSION}" ]]; then | ||
# # Install cargo-pgrx | ||
# cargo install -j $(nproc) --locked cargo-pgrx --version ${THIS_PGRX_VERSION} --force | ||
|
||
# # Initialize it (again) -- probably unnecessary, but might as well in case ~/.pgrx/config.toml ever changes | ||
# cargo pgrx init "--pg${{ env.pg_version }}=/usr/lib/postgresql/${{ env.pg_version }}/bin/pg_config" | ||
# fi | ||
|
||
# # Generate schema | ||
# cargo pgrx schema -p pg_analytics pg${{ env.pg_version }} > ~/old.sql | ||
|
||
# - name: Generate Schema Diffs | ||
# run: | | ||
# (pg-schema-diff diff ~/old.sql ~/this.sql | grep -v "^$" > ~/diff.sql) || true | ||
# (diff ~/old.sql ~/this.sql > ~/diff.patch) || true | ||
|
||
# - name: Generate Commit Message | ||
# id: generate_commit_message | ||
# run: | | ||
# if test -s ~/diff.sql; then | ||
# echo "Generating GitHub comment message" | ||
# { | ||
# echo 'DIFF<<EOF' | ||
# echo 'A schema difference was detected.' | ||
# echo | ||
# echo 'A suggested "upgrade.sql" script entry might be:' | ||
# echo | ||
# echo '```sql' | ||
# cat ~/diff.sql | ||
# echo '```' | ||
|
||
# # | ||
# # cargo-pgrx schema doesn't output its generated schema in a stable format | ||
# # so including the entire diff is garbage. We still generate it, tho, because | ||
# # cargo-pgrx will improve someday, and when it does we can uncomment these lines | ||
# # | ||
|
||
# # echo | ||
# # echo 'The full diff between both schemas is:' | ||
# # echo | ||
# # echo '```diff' | ||
# # cat ~/diff.patch | ||
# # echo '```' | ||
# echo EOF | ||
# } >> "$GITHUB_ENV" | ||
|
||
# # Set a flag to indicate a schema difference was detected | ||
# echo "schema_diff_detected=true" >> $GITHUB_OUTPUT | ||
# else | ||
# echo "No schema difference detected" | ||
# echo "schema_diff_detected=false" >> $GITHUB_OUTPUT | ||
# fi | ||
|
||
# - name: Attach Schema Diff to PR | ||
# uses: actions/github-script@v6 | ||
# if: steps.generate_commit_message.outputs.schema_diff_detected == 'true' | ||
# with: | ||
# script: | | ||
# github.rest.issues.createComment({ | ||
# issue_number: context.issue.number, | ||
# owner: context.repo.owner, | ||
# repo: context.repo.repo, | ||
# body: process.env.DIFF | ||
# }) | ||
# workflows/check-pg_analytics-schema-upgrade.yml | ||
# | ||
# Check pg_analytics Schema Upgrade pg_analytics | ||
# Determine if a commit introduces an extension schema change for pg_analytics. | ||
|
||
name: Check pg_analytics Schema Upgrade | ||
|
||
on: | ||
pull_request: | ||
types: [opened, synchronize, reopened, ready_for_review] | ||
branches: | ||
- dev | ||
- main | ||
paths: | ||
- ".github/workflows/check-pg_analytics-schema-upgrade.yml" | ||
- "pg_analytics/**" | ||
- "!pg_analytics/README.md" | ||
workflow_dispatch: | ||
|
||
# Required to post a comment to the PR | ||
permissions: | ||
pull-requests: write | ||
|
||
concurrency: | ||
group: check-pg_analytics-schema-upgrade-${{ github.head_ref || github.ref }} | ||
cancel-in-progress: true | ||
|
||
jobs: | ||
check-pg_analytics-schema-upgrade: | ||
name: Post Schema Change to PR | ||
runs-on: depot-ubuntu-latest-8 | ||
if: github.event.pull_request.draft == false | ||
env: | ||
pg_version: 13 # Required by pg-schema-diff | ||
|
||
steps: | ||
- name: Checkout Git Repository | ||
uses: actions/checkout@v4 | ||
with: | ||
fetch-depth: 0 # Fetch the entire history | ||
|
||
- name: Install Rust | ||
uses: dtolnay/rust-toolchain@stable | ||
|
||
# Caches from base branches are available to PRs, but not across unrelated branches, so we only | ||
# save the cache on the 'dev' branch, but load it on all branches. | ||
- name: Install Rust Cache | ||
uses: Swatinem/rust-cache@v2 | ||
with: | ||
prefix-key: "v1" | ||
shared-key: ${{ runner.os }}-rust-cache-pg_analytics-${{ HashFiles('Cargo.lock') }} | ||
cache-targets: true | ||
cache-on-failure: true | ||
cache-all-crates: true | ||
save-if: ${{ github.ref == 'refs/heads/dev' }} | ||
|
||
- name: Install & Configure Supported PostgreSQL Version | ||
run: | | ||
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - | ||
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list' | ||
sudo apt-get update && sudo apt-get install -y postgresql-${{ env.pg_version }} postgresql-server-dev-${{ env.pg_version }} | ||
sudo chown -R $(whoami) /usr/share/postgresql/${{ env.pg_version }}/ /usr/lib/postgresql/${{ env.pg_version }}/ /var/lib/postgresql/${{ env.pg_version }}/ | ||
rustup component add llvm-tools-preview | ||
echo "/usr/lib/postgresql/${{ env.pg_version }}/bin" >> $GITHUB_PATH | ||
- name: Install pg-schema-diff and its Required Dependencies | ||
run: | | ||
sudo apt install clang llvm diffutils | ||
cargo install --git https://github.com/zombodb/pg-schema-diff.git | ||
- name: Extract pgrx Version & Install cargo-pgrx | ||
run: | | ||
PGRX_VERSION=$(cargo tree --depth 1 -i pgrx -p pg_analytics | head -n 1 | cut -f2 -dv) | ||
cargo install -j $(nproc) --locked cargo-pgrx --version ${PGRX_VERSION} | ||
cargo pgrx init "--pg${{ env.pg_version }}=/usr/lib/postgresql/${{ env.pg_version }}/bin/pg_config" | ||
# Save the pgrx version for comparison later | ||
echo "FIRST_PGRX_VERSION=${PGRX_VERSION}" >> $GITHUB_ENV | ||
- name: Generate Schema from this git rev | ||
run: cargo pgrx schema -p pg_analytics pg${{ env.pg_version }} > ~/this.sql | ||
|
||
- name: Switch to Base git rev and Generate Schema Again | ||
run: | | ||
# Switch to the base git rev | ||
git checkout . | ||
git checkout ${{ github.event.pull_request.base.ref }} | ||
# See if we need a different cargo-pgrx and install it if so | ||
THIS_PGRX_VERSION=$(cargo tree --depth 1 -i pgrx -p pg_analytics | head -n 1 | cut -f2 -dv) | ||
if [[ "${THIS_PGRX_VERSION}" != "${FIRST_PGRX_VERSION}" ]]; then | ||
# Install cargo-pgrx | ||
cargo install -j $(nproc) --locked cargo-pgrx --version ${THIS_PGRX_VERSION} --force | ||
# Initialize it (again) -- probably unnecessary, but might as well in case ~/.pgrx/config.toml ever changes | ||
cargo pgrx init "--pg${{ env.pg_version }}=/usr/lib/postgresql/${{ env.pg_version }}/bin/pg_config" | ||
fi | ||
# Generate schema | ||
cargo pgrx schema -p pg_analytics pg${{ env.pg_version }} > ~/old.sql | ||
- name: Generate Schema Diffs | ||
run: | | ||
(pg-schema-diff diff ~/old.sql ~/this.sql | grep -v "^$" > ~/diff.sql) || true | ||
(diff ~/old.sql ~/this.sql > ~/diff.patch) || true | ||
- name: Generate Commit Message | ||
id: generate_commit_message | ||
run: | | ||
if test -s ~/diff.sql; then | ||
echo "Generating GitHub comment message" | ||
{ | ||
echo 'DIFF<<EOF' | ||
echo 'A schema difference was detected.' | ||
echo | ||
echo 'A suggested "upgrade.sql" script entry might be:' | ||
echo | ||
echo '```sql' | ||
cat ~/diff.sql | ||
echo '```' | ||
# | ||
# Include the full schema diff, for informational purposes | ||
# | ||
echo | ||
echo '<details>' | ||
echo '<summary>The full diff between both schemas is:</summary>' | ||
echo | ||
echo '```diff' | ||
cat ~/diff.patch | ||
echo '```' | ||
echo '</details>' | ||
echo EOF | ||
} >> "$GITHUB_ENV" | ||
# Set a flag to indicate a schema difference was detected | ||
echo "schema_diff_detected=true" >> $GITHUB_OUTPUT | ||
else | ||
echo "No schema difference detected" | ||
echo "schema_diff_detected=false" >> $GITHUB_OUTPUT | ||
fi | ||
- name: Attach Schema Diff to PR | ||
uses: actions/github-script@v6 | ||
if: steps.generate_commit_message.outputs.schema_diff_detected == 'true' | ||
with: | ||
script: | | ||
github.rest.issues.createComment({ | ||
issue_number: context.issue.number, | ||
owner: context.repo.owner, | ||
repo: context.repo.repo, | ||
body: process.env.DIFF | ||
}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.