feat: Add get_feature_flag_result, get_feature_flag_result! API
#8
Workflow file for this run
This file contains hidden or 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
| name: "Release" | |
| on: | |
| pull_request: | |
| types: [closed] | |
| branches: [master] | |
| permissions: | |
| contents: read | |
| # Concurrency control: only one release process can run at a time | |
| # This prevents race conditions if multiple PRs with 'release' label merge simultaneously | |
| concurrency: | |
| group: release | |
| cancel-in-progress: false | |
| jobs: | |
| check-release-label: | |
| name: Check for release label | |
| runs-on: ubuntu-latest | |
| # Run when PR with 'release' label is merged to master | |
| if: | | |
| github.event.pull_request.merged == true | |
| && contains(github.event.pull_request.labels.*.name, 'release') | |
| outputs: | |
| should-release: ${{ steps.check.outputs.should-release }} | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| ref: master | |
| fetch-depth: 0 | |
| - name: Install Rust | |
| uses: dtolnay/rust-toolchain@0b1efabc08b657293548b77fb76cc02d26091c7e | |
| with: | |
| toolchain: 1.91.1 | |
| components: cargo | |
| - name: Install Sampo CLI | |
| run: cargo install sampo | |
| - name: Check release conditions | |
| id: check | |
| run: | | |
| if sampo release --dry-run; then | |
| echo "should-release=true" >> "$GITHUB_OUTPUT" | |
| echo "Changesets found, ready to release" | |
| else | |
| echo "should-release=false" >> "$GITHUB_OUTPUT" | |
| echo "No changesets to release" | |
| fi | |
| notify-approval-needed: | |
| name: Notify Slack - Approval Needed | |
| needs: check-release-label | |
| if: needs.check-release-label.outputs.should-release == 'true' | |
| uses: posthog/.github/.github/workflows/notify-approval-needed.yml@main | |
| with: | |
| slack_channel_id: ${{ vars.SLACK_APPROVALS_CLIENT_LIBRARIES_CHANNEL_ID }} | |
| slack_user_group_id: ${{ vars.GROUP_CLIENT_LIBRARIES_SLACK_GROUP_ID }} | |
| secrets: | |
| slack_bot_token: ${{ secrets.SLACK_CLIENT_LIBRARIES_BOT_TOKEN }} | |
| posthog_project_api_key: ${{ secrets.POSTHOG_PROJECT_API_KEY }} | |
| release: | |
| name: Release and publish | |
| needs: [check-release-label, notify-approval-needed] | |
| runs-on: ubuntu-latest | |
| # Use `always()` to ensure the job runs even if the check-release-label job fails | |
| # but still depend on it to be able to use `needs.notify-approval-needed.outputs.slack_ts` | |
| if: always() && needs.check-release-label.outputs.should-release == 'true' | |
| environment: "Release" # This will require an approval from a maintainer, they are notified in Slack above | |
| permissions: | |
| contents: write | |
| actions: write | |
| id-token: write | |
| steps: | |
| - name: Notify Slack - Approved | |
| if: needs.notify-approval-needed.outputs.slack_ts != '' | |
| uses: posthog/.github/.github/actions/slack-thread-reply@main | |
| with: | |
| slack_bot_token: ${{ secrets.SLACK_CLIENT_LIBRARIES_BOT_TOKEN }} | |
| slack_channel_id: ${{ vars.SLACK_APPROVALS_CLIENT_LIBRARIES_CHANNEL_ID }} | |
| thread_ts: ${{ needs.notify-approval-needed.outputs.slack_ts }} | |
| message: "✅ Release approved! Version bump in progress..." | |
| emoji_reaction: "white_check_mark" | |
| - name: Get GitHub App token | |
| id: releaser | |
| uses: actions/create-github-app-token@v2 | |
| with: | |
| app-id: ${{ secrets.GH_APP_POSTHOG_ELIXIR_RELEASER_APP_ID }} | |
| private-key: ${{ secrets.GH_APP_POSTHOG_ELIXIR_RELEASER_PRIVATE_KEY }} | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| ref: master | |
| fetch-depth: 0 | |
| token: ${{ steps.releaser.outputs.token }} | |
| - name: Set up Elixir | |
| uses: erlef/setup-beam@v1 | |
| with: | |
| elixir-version: 1.18.3 | |
| otp-version: 27.3 | |
| - name: Install Rust | |
| uses: dtolnay/rust-toolchain@0b1efabc08b657293548b77fb76cc02d26091c7e | |
| with: | |
| toolchain: 1.91.1 | |
| components: cargo | |
| - name: Install Sampo CLI | |
| run: cargo install sampo | |
| - name: Install Hex dependencies | |
| run: | | |
| mix local.hex --force | |
| mix local.rebar --force | |
| mix deps.get | |
| - name: Configure Git | |
| run: | | |
| git config user.name "github-actions[bot]" | |
| git config user.email "github-actions[bot]@users.noreply.github.com" | |
| - name: Prepare release with Sampo | |
| id: sampo-release | |
| env: | |
| GITHUB_TOKEN: ${{ steps.releaser.outputs.token }} | |
| run: | | |
| sampo release | |
| new_version=$(grep '@version "' mix.exs | grep -o '"[0-9]\+\.[0-9]\+\.[0-9]\+"' | tr -d '"') | |
| echo "new_version=$new_version" >> "$GITHUB_OUTPUT" | |
| - name: Commit release changes | |
| id: commit-release | |
| env: | |
| GITHUB_TOKEN: ${{ steps.releaser.outputs.token }} | |
| run: | | |
| git add -A | |
| if git diff --staged --quiet; then | |
| echo "No changes to commit" | |
| echo "committed=false" >> "$GITHUB_OUTPUT" | |
| else | |
| git commit -m "chore: Release v${{ steps.sampo-release.outputs.new_version }}" | |
| git push origin master | |
| echo "committed=true" >> "$GITHUB_OUTPUT" | |
| fi | |
| - name: Publish with Sampo | |
| if: steps.commit-release.outputs.committed == 'true' | |
| env: | |
| GITHUB_TOKEN: ${{ steps.releaser.outputs.token }} | |
| HEX_API_KEY: ${{ secrets.HEX_API_KEY }} | |
| run: sampo publish -- --yes | |
| - name: Push tags | |
| if: steps.commit-release.outputs.committed == 'true' | |
| run: git push origin --tags | |
| # Notify in case of a failure | |
| - name: Send failure event to PostHog | |
| if: ${{ failure() }} | |
| uses: PostHog/posthog-github-action@v0.1 | |
| with: | |
| posthog-token: "${{ secrets.POSTHOG_PROJECT_API_KEY }}" | |
| event: "posthog-elixir-github-release-workflow-failure" | |
| properties: >- | |
| { | |
| "commitSha": "${{ github.sha }}", | |
| "jobStatus": "${{ job.status }}", | |
| "ref": "${{ github.ref }}", | |
| "version": "v${{ steps.sampo-release.outputs.new_version }}" | |
| } | |
| - name: Notify Slack - Failed | |
| if: ${{ failure() && needs.notify-approval-needed.outputs.slack_ts != '' }} | |
| uses: posthog/.github/.github/actions/slack-thread-reply@main | |
| with: | |
| slack_bot_token: ${{ secrets.SLACK_CLIENT_LIBRARIES_BOT_TOKEN }} | |
| slack_channel_id: ${{ vars.SLACK_APPROVALS_CLIENT_LIBRARIES_CHANNEL_ID }} | |
| thread_ts: ${{ needs.notify-approval-needed.outputs.slack_ts }} | |
| message: "❌ Failed to release `posthog-elixir@v${{ steps.sampo-release.outputs.new_version }}`! <https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}|View logs>" | |
| emoji_reaction: "x" | |
| notify-released: | |
| name: Notify Slack - Released | |
| needs: [check-release-label, notify-approval-needed, release] | |
| runs-on: ubuntu-latest | |
| if: always() && needs.release.result == 'success' && needs.notify-approval-needed.outputs.slack_ts != '' | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Notify Slack - Released | |
| uses: posthog/.github/.github/actions/slack-thread-reply@main | |
| with: | |
| slack_bot_token: ${{ secrets.SLACK_CLIENT_LIBRARIES_BOT_TOKEN }} | |
| slack_channel_id: ${{ vars.SLACK_APPROVALS_CLIENT_LIBRARIES_CHANNEL_ID }} | |
| thread_ts: ${{ needs.notify-approval-needed.outputs.slack_ts }} | |
| message: "🚀 posthog-elixir released successfully!" | |
| emoji_reaction: "rocket" |