Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Prod Promotion -- v0.2.1 #156

Merged
merged 9 commits into from
Oct 14, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .codespellignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
crate
socio-economic
327 changes: 173 additions & 154 deletions .github/workflows/check-pg_analytics-schema-upgrade.yml
Original file line number Diff line number Diff line change
@@ -1,154 +1,173 @@
# 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 ${{ 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@v7
if: steps.generate_commit_message.outputs.schema_diff_detected == 'true'
with:
script: |
const comments = await github.rest.issues.listComments({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo
});

const botComment = comments.data.find(comment => comment.user.type === 'Bot' && comment.body.includes('A schema difference was detected.'));

if (botComment) {
// Update the existing comment
await github.rest.issues.updateComment({
comment_id: botComment.id,
owner: context.repo.owner,
repo: context.repo.repo,
body: process.env.DIFF
});
} else {
// Create a new comment if none exists
await github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: process.env.DIFF
});
}
32 changes: 32 additions & 0 deletions .github/workflows/check-typo.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# workflows/check-typo.yml
#
# Check Typo
# Check Typo using codespell.

name: Check Typo

on:
pull_request:
types: [opened, synchronize, reopened, ready_for_review]
workflow_dispatch:

concurrency:
group: check-typo-${{ github.head_ref || github.ref }}
cancel-in-progress: true

jobs:
check-typo:
name: Check Typo using codespell
runs-on: depot-ubuntu-latest-2
if: github.event.pull_request.draft == false

steps:
- name: Checkout Git Repository
uses: actions/checkout@v4

- name: Check Typo using codespell
uses: codespell-project/actions-codespell@v2
with:
check_filenames: true
ignore_words_file: .codespellignore
skip: "Cargo.lock"
Loading