Skip to content

Commit

Permalink
Merge branch 'master' into snappy-pixel
Browse files Browse the repository at this point in the history
  • Loading branch information
MarconLP authored Dec 18, 2024
2 parents 7664ac4 + 3169809 commit aba3485
Show file tree
Hide file tree
Showing 377 changed files with 12,869 additions and 18,007 deletions.
170 changes: 155 additions & 15 deletions .github/workflows/ci-hog.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,25 +48,23 @@ jobs:
hog-tests:
needs: changes
timeout-minutes: 30

name: Hog tests
runs-on: ubuntu-24.04
if: needs.changes.outputs.hog == 'true'

steps:
# If this run wasn't initiated by the bot (meaning: snapshot update) and we've determined
# there are backend changes, cancel previous runs
- uses: n1hility/cancel-previous-runs@v3
if: github.actor != 'posthog-bot' && needs.changes.outputs.hog == 'true'
if: github.actor != 'posthog-bot'
with:
token: ${{ secrets.GITHUB_TOKEN }}

- uses: actions/checkout@v3
if: needs.changes.outputs.hog == 'true'
with:
fetch-depth: 1

- name: Set up Python
if: needs.changes.outputs.hog == 'true'
uses: actions/setup-python@v5
with:
python-version: 3.11.9
Expand All @@ -76,31 +74,25 @@ jobs:

# uv is a fast pip alternative: https://github.com/astral-sh/uv/
- run: pip install uv
if: needs.changes.outputs.hog == 'true'

- name: Install SAML (python3-saml) dependencies
if: needs.changes.outputs.hog == 'true'
run: |
sudo apt-get update
sudo apt-get install libxml2-dev libxmlsec1 libxmlsec1-dev libxmlsec1-openssl
- name: Install Python dependencies
if: needs.changes.outputs.hog == 'true'
run: |
uv pip install --system -r requirements.txt -r requirements-dev.txt
- name: Install pnpm
if: needs.changes.outputs.hog == 'true'
uses: pnpm/action-setup@v4

- name: Set up Node.js
if: needs.changes.outputs.hog == 'true'
uses: actions/setup-node@v4
with:
node-version: 18.12.1
node-version: 18

- name: Check if ANTLR definitions are up to date
if: needs.changes.outputs.hog == 'true'
run: |
cd ..
sudo apt-get install default-jre
Expand All @@ -123,27 +115,175 @@ jobs:
ANTLR_VERSION: '4.13.2'

- name: Check if STL bytecode is up to date
if: needs.changes.outputs.hog == 'true'
run: |
python -m hogvm.stl.compile
git diff --exit-code
- name: Run HogVM Python tests
if: needs.changes.outputs.hog == 'true'
run: |
pytest hogvm
- name: Run HogVM TypeScript tests
if: needs.changes.outputs.hog == 'true'
run: |
cd hogvm/typescript
pnpm install --frozen-lockfile
pnpm run test
- name: Run Hog tests
if: needs.changes.outputs.hog == 'true'
run: |
cd hogvm/typescript
pnpm run build
cd ../
./test.sh && git diff --exit-code
check-package-version:
name: Check HogVM TypeScript package version and detect an update
needs: hog-tests
if: needs.hog-tests.result == 'success' && needs.changes.outputs.hog == 'true'
runs-on: ubuntu-24.04
outputs:
committed-version: ${{ steps.check-package-version.outputs.committed-version }}
published-version: ${{ steps.check-package-version.outputs.published-version }}
is-new-version: ${{ steps.check-package-version.outputs.is-new-version }}
steps:
- name: Checkout the repository
uses: actions/checkout@v2
- name: Check package version and detect an update
id: check-package-version
uses: PostHog/check-package-version@v2
with:
path: hogvm/typescript

release-hogvm:
name: Release new HogVM TypeScript version
runs-on: ubuntu-24.04
needs: check-package-version
if: needs.changes.outputs.hog == 'true' && needs.check-package-version.outputs.is-new-version == 'true'
env:
COMMITTED_VERSION: ${{ needs.check-package-version.outputs.committed-version }}
PUBLISHED_VERSION: ${{ needs.check-package-version.outputs.published-version }}
steps:
- name: Checkout the repository
uses: actions/checkout@v4
with:
fetch-depth: 1
token: ${{ secrets.POSTHOG_BOT_GITHUB_TOKEN }}
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: 3.11.9
cache: 'pip'
cache-dependency-path: '**/requirements*.txt'
token: ${{ secrets.POSTHOG_BOT_GITHUB_TOKEN }}
- run: pip install uv
- name: Install SAML (python3-saml) dependencies
run: |
sudo apt-get update
sudo apt-get install libxml2-dev libxmlsec1 libxmlsec1-dev libxmlsec1-openssl
- name: Install Python dependencies
run: |
uv pip install --system -r requirements.txt -r requirements-dev.txt
- name: Install pnpm
uses: pnpm/action-setup@v4
- name: Set up Node 18
uses: actions/setup-node@v4
with:
node-version: 18
registry-url: https://registry.npmjs.org
- name: Install package.json dependencies
run: cd hogvm/typescript && pnpm install
- name: Publish the package in the npm registry
run: cd hogvm/typescript && npm publish --access public
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
- name: Sleep 60 seconds to allow npm to update the package
run: sleep 60

update-versions:
name: Update versions in package.json
runs-on: ubuntu-24.04
needs: release-hogvm
if: always() # This ensures the job runs regardless of the result of release-hogvm
steps:
- name: Checkout the repository
uses: actions/checkout@v4
with:
fetch-depth: 1
repository: ${{ github.event.pull_request.head.repo.full_name }}
ref: ${{ github.event.pull_request.head.ref }}
token: ${{ secrets.POSTHOG_BOT_GITHUB_TOKEN }}

- name: Install pnpm
uses: pnpm/action-setup@v4
- name: Set up Node 18
uses: actions/setup-node@v4
with:
node-version: 18
registry-url: https://registry.npmjs.org

- name: Check for version mismatches
id: check-mismatch
run: |
# Extract committed version
HOGVM_VERSION=$(jq -r '.version' hogvm/typescript/package.json)
# Compare dependencies in package.json
MAIN_VERSION=$(jq -r '.dependencies."@posthog/hogvm"' package.json | tr -d '^')
PLUGIN_VERSION=$(jq -r '.dependencies."@posthog/hogvm"' plugin-server/package.json | tr -d '^')
echo "HOGVM_VERSION=$HOGVM_VERSION"
echo "MAIN_VERSION=$MAIN_VERSION"
echo "PLUGIN_VERSION=$PLUGIN_VERSION"
# Set output if mismatches exist
if [[ "$HOGVM_VERSION" != "$MAIN_VERSION" || "$HOGVM_VERSION" != "$PLUGIN_VERSION" ]]; then
echo "mismatch=true" >> "$GITHUB_ENV"
else
echo "mismatch=false" >> "$GITHUB_ENV"
fi
- name: Update package.json versions
if: env.mismatch == 'true'
run: |
VERSION=$(jq ".version" hogvm/typescript/package.json -r)
retry_pnpm_install() {
local retries=0
local max_retries=20 # 10 minutes total
local delay=30
while [[ $retries -lt $max_retries ]]; do
echo "Attempting pnpm install (retry $((retries+1))/$max_retries)..."
pnpm install --no-frozen-lockfile && break
echo "Install failed. Retrying in $delay seconds..."
sleep $delay
retries=$((retries + 1))
done
if [[ $retries -eq $max_retries ]]; then
echo "pnpm install failed after $max_retries attempts."
exit 1
fi
}
# Update main package.json
mv package.json package.old.json
jq --indent 4 '.dependencies."@posthog/hogvm" = "^'$VERSION'"' package.old.json > package.json
rm package.old.json
retry_pnpm_install
# Update plugin-server/package.json
cd plugin-server
mv package.json package.old.json
jq --indent 4 '.dependencies."@posthog/hogvm" = "^'$VERSION'"' package.old.json > package.json
rm package.old.json
retry_pnpm_install
- name: Commit updated package.json files
if: env.mismatch == 'true'
uses: EndBug/add-and-commit@v9
with:
add: '["package.json", "pnpm-lock.yaml", "plugin-server/package.json", "plugin-server/pnpm-lock.yaml", "hogvm/typescript/package.json"]'
message: 'Update @posthog/hogvm version in package.json'
default_author: github_actions
github_token: ${{ secrets.POSTHOG_BOT_GITHUB_TOKEN }}
52 changes: 0 additions & 52 deletions .github/workflows/release-hogvm.yml

This file was deleted.

14 changes: 5 additions & 9 deletions cypress/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,13 @@

The Cypress tests run with a PostHog instance that has no feature flags set up.

To test feature flags you can intercept the call to the `decide` endpoint
To test feature flags you can intercept the call to the `decide` endpoint using this helper

```javascript
// sometimes the system under test calls `/decide`
// and sometimes it calls https://app.posthog.com/decide
cy.intercept('**/decide/*', (req) =>
req.reply(
decideResponse({
// add feature flags here, for e.g.
// 'feature-flag-key': true,
})
)
)
setupFeatureFlags({
// add feature flags here, for e.g.
'feature-flag-key': true,
})
```
12 changes: 4 additions & 8 deletions cypress/e2e/alerts.cy.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,11 @@
import { decideResponse } from '../fixtures/api/decide'
import { createInsight, createInsightWithBreakdown } from '../productAnalytics'
import { setupFeatureFlags } from '../support/decide'

describe('Alerts', () => {
beforeEach(() => {
cy.intercept('**/decide/*', (req) =>
req.reply(
decideResponse({
alerts: true,
})
)
)
setupFeatureFlags({
alerts: true,
})
createInsight('insight')
})

Expand Down
2 changes: 2 additions & 0 deletions cypress/e2e/dashboard.cy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -379,6 +379,8 @@ describe('Dashboard', () => {
cy.get('[data-attr="date-filter"]').click()
cy.contains('span', 'Last 14 days').click()

cy.wait(2000)

// insight meta should be updated to show new date range
cy.get('h5').contains('Last 14 days').should('exist')

Expand Down
13 changes: 5 additions & 8 deletions cypress/e2e/experiments.cy.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { decideResponse } from '../fixtures/api/decide'
import { setupFeatureFlags } from '../support/decide'

describe('Experiments', () => {
let randomNum
Expand Down Expand Up @@ -47,13 +47,10 @@ describe('Experiments', () => {
})

const createExperimentInNewUi = (): void => {
cy.intercept('**/decide/*', (req) =>
req.reply(
decideResponse({
'new-experiments-ui': true,
})
)
)
setupFeatureFlags({
'new-experiments-ui': true,
})

cy.visit('/experiments')

// Name, flag key, description
Expand Down
12 changes: 4 additions & 8 deletions cypress/e2e/exports.cy.ts
Original file line number Diff line number Diff line change
@@ -1,18 +1,14 @@
import { urls } from 'scenes/urls'

import { decideResponse } from '../fixtures/api/decide'
import { setupFeatureFlags } from '../support/decide'

// NOTE: As the API data is randomly generated, we are only really testing here that the overall output is correct
// The actual graph is not under test
describe('Exporting Insights', () => {
beforeEach(() => {
cy.intercept('https://us.i.posthog.com/decide/*', (req) =>
req.reply(
decideResponse({
'export-dashboard-insights': true,
})
)
)
setupFeatureFlags({
'export-dashboard-insights': true,
})
cy.visit(urls.insightNew())
// apply filter
cy.get('[data-attr$=add-filter-group]').click()
Expand Down
Loading

0 comments on commit aba3485

Please sign in to comment.