Skip to content

Commit 2ca0a19

Browse files
refactor: rename repository to readylog
2 parents da316c3 + 1b25d17 commit 2ca0a19

File tree

12 files changed

+716
-48
lines changed

12 files changed

+716
-48
lines changed

.github/workflows/build.yml

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
name: Build
2+
3+
on:
4+
workflow_call:
5+
inputs:
6+
semantic-release-config-file:
7+
required: true
8+
type: string
9+
distribution-artifacts-name:
10+
required: true
11+
type: string
12+
distribution-artifacts-dir:
13+
required: true
14+
type: string
15+
lockfile-artifact:
16+
required: true
17+
type: string
18+
19+
outputs:
20+
new-release-detected:
21+
value: ${{ jobs.build.outputs.new-release-detected }}
22+
new-release-version:
23+
value: ${{ jobs.build.outputs.new-release-version }}
24+
new-release-tag:
25+
value: ${{ jobs.build.outputs.new-release-tag }}
26+
new-release-is-prerelease:
27+
value: ${{ jobs.build.outputs.new-release-is-prerelease }}
28+
29+
30+
jobs:
31+
build:
32+
name: Build
33+
runs-on: ubuntu-latest
34+
permissions:
35+
contents: read
36+
outputs:
37+
new-release-detected: ${{ steps.version.outputs.released }}
38+
new-release-version: ${{ steps.version.outputs.version }}
39+
new-release-tag: ${{ steps.version.outputs.tag }}
40+
new-release-is-prerelease: ${{ steps.version.outputs.is_prerelease }}
41+
steps:
42+
- !step
43+
name: Setup | Checkout Repository at Workflow SHA
44+
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
45+
with:
46+
ref: ${{ github.sha }}
47+
fetch-depth: 0
48+
49+
- name: Setup | Force Correct Release Branch on Workflow SHA
50+
run: git checkout -B ${{ github.ref_name }}
51+
52+
- !step
53+
name: Setup | Install Python
54+
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
55+
with:
56+
python-version-file: .python-version
57+
58+
- !step
59+
name: Setup | Install uv
60+
uses: astral-sh/setup-uv@eb1897b8dc4b5d5bfe39a428a8f2304605e0983c # v7.0.0
61+
- name: Setup | Install python-semantic-release
62+
env:
63+
UV_NO_MANAGED_PYTHON: true
64+
run: uv tool install python-semantic-release
65+
66+
- name: Setup | Install Project
67+
env:
68+
UV_NO_MANAGED_PYTHON: true
69+
run: uv sync --verbose
70+
71+
- name: Build | Build Next Version Artifacts
72+
id: version
73+
env:
74+
UV_NO_MANAGED_PYTHON: true
75+
GH_TOKEN: "none"
76+
run: uv run -- semantic-release --config ${{ inputs.semantic-release-config-file }} --verbose version --no-changelog --no-commit --no-tag
77+
78+
- !step
79+
name: Upload | Distribution Artifacts
80+
if: ${{ steps.version.outputs.released == 'true' }}
81+
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
82+
with:
83+
name: ${{ inputs.distribution-artifacts-name }}
84+
path: ${{ format('{0}/**', inputs.distribution-artifacts-dir) }}
85+
if-no-files-found: error
86+
87+
- !step
88+
name: Upload | Lock File Artifact
89+
if: ${{ steps.version.outputs.released == 'true' }}
90+
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
91+
with:
92+
name: ${{ inputs.lockfile-artifact }}
93+
path: ${{ inputs.lockfile-artifact }}
94+
if-no-files-found: error
Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
name: Continuous Delivery
2+
3+
on:
4+
push:
5+
branches:
6+
- master
7+
8+
permissions:
9+
contents: read
10+
11+
12+
env:
13+
PACKAGE_NAME: "readylog"
14+
DISTRIBUTION_FILE_INCIPIT: "readylog"
15+
TEST_DEPENDENCY_GROUP: "test"
16+
RUN_TEST_COMMAND: "uv run -- pytest --verbose"
17+
SEMANTIC_RELEASE_CONFIG_FILE: "semantic-release.toml"
18+
DISTRIBUTION_ARTIFACTS_NAME: "dist"
19+
DISTRIBUTION_ARTIFACTS_DIR: "dist"
20+
LOCKFILE_ARTIFACT: "uv.lock"
21+
22+
23+
jobs:
24+
lint:
25+
name: Lint
26+
runs-on: ubuntu-latest
27+
steps:
28+
- !step
29+
name: Setup | Checkout Repository
30+
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
31+
- !step
32+
name: Lint
33+
uses: astral-sh/ruff-action@57714a7c8a2e59f32539362ba31877a1957dded1 # v3.5.1
34+
variables:
35+
name: Variables
36+
needs: lint
37+
runs-on: ubuntu-latest
38+
outputs:
39+
semantic-release-config-file: ${{ steps.set-variables.outputs.semantic-release-config-file }}
40+
package-name: ${{ steps.set-variables.outputs.package-name }}
41+
distribution-file-incipit: ${{ steps.set-variables.outputs.distribution-file-incipit }}
42+
test-dependency-group: ${{ steps.set-variables.outputs.test-dependency-group }}
43+
run-test-command: ${{ steps.set-variables.outputs.run-test-command }}
44+
distribution-artifacts-name: ${{ steps.set-variables.outputs.distribution-artifacts-name }}
45+
distribution-artifacts-dir: ${{ steps.set-variables.outputs.distribution-artifacts-dir }}
46+
lockfile-artifact: ${{ steps.set-variables.outputs.lockfile-artifact }}
47+
publish-data: ${{ steps.define-publish-data.outputs.data }}
48+
steps:
49+
- name: Setup | Set Variables for Reusable Workflows
50+
id: set-variables
51+
run: |
52+
echo "semantic-release-config-file=${SEMANTIC_RELEASE_CONFIG_FILE}" >> $GITHUB_OUTPUT
53+
echo "package-name=${PACKAGE_NAME}" >> $GITHUB_OUTPUT
54+
echo "distribution-file-incipit=${DISTRIBUTION_FILE_INCIPIT}" >> $GITHUB_OUTPUT
55+
echo "test-dependency-group=${TEST_DEPENDENCY_GROUP}" >> $GITHUB_OUTPUT
56+
echo "run-test-command=${RUN_TEST_COMMAND}" >> $GITHUB_OUTPUT
57+
echo "distribution-artifacts-name=${DISTRIBUTION_ARTIFACTS_NAME}" >> $GITHUB_OUTPUT
58+
echo "distribution-artifacts-dir=${DISTRIBUTION_ARTIFACTS_DIR}" >> $GITHUB_OUTPUT
59+
echo "lockfile-artifact=${LOCKFILE_ARTIFACT}" >> $GITHUB_OUTPUT
60+
- name: Setup | Define Publishing Matrix
61+
id: define-publish-data
62+
run: |
63+
echo 'data=[{"registry":"TestPyPI","environment-name":"testpypi","hostname":"test.pypi.org","publish-api-url":"https://test.pypi.org/legacy/"},{"registry":"PyPI","environment-name":"pypi","hostname":"pypi.org","publish-api-url":"https://upload.pypi.org/legacy/"}]' >> $GITHUB_OUTPUT
64+
65+
66+
build:
67+
name: Build
68+
needs: variables
69+
uses: ./.github/workflows/build.yml
70+
with:
71+
semantic-release-config-file: ${{ needs.variables.outputs.semantic-release-config-file }}
72+
distribution-artifacts-name: ${{ needs.variables.outputs.distribution-artifacts-name }}
73+
distribution-artifacts-dir: ${{ needs.variables.outputs.distribution-artifacts-dir }}
74+
lockfile-artifact: ${{ needs.variables.outputs.lockfile-artifact }}
75+
76+
77+
test-e2e:
78+
name: End-to-End Test
79+
needs:
80+
- variables
81+
- build
82+
uses: ./.github/workflows/test-e2e.yml
83+
with:
84+
new-release-detected: ${{ needs.build.outputs.new-release-detected }}
85+
distribution-artifacts-name: ${{ needs.variables.outputs.distribution-artifacts-name }}
86+
distribution-artifacts-dir: ${{ needs.variables.outputs.distribution-artifacts-dir }}
87+
package-name: ${{ needs.variables.outputs.package-name }}
88+
distribution-file-incipit: ${{ needs.variables.outputs.distribution-file-incipit }}
89+
test-dependency-group: ${{ needs.variables.outputs.test-dependency-group }}
90+
run-test-command: ${{ needs.variables.outputs.run-test-command }}
91+
92+
93+
release:
94+
name: Release
95+
needs:
96+
- variables
97+
- build
98+
- test-e2e
99+
uses: ./.github/workflows/release.yml
100+
with:
101+
new-release-detected: ${{ needs.build.outputs.new-release-detected }}
102+
semantic-release-config-file: ${{ needs.variables.outputs.semantic-release-config-file }}
103+
distribution-artifacts-name: ${{ needs.variables.outputs.distribution-artifacts-name }}
104+
distribution-artifacts-dir: ${{ needs.variables.outputs.distribution-artifacts-dir }}
105+
lockfile-artifact: ${{ needs.variables.outputs.lockfile-artifact }}
106+
secrets: inherit
107+
permissions:
108+
contents: write
109+
110+
111+
# PyPI does not support publishing from reusable workflows yet. Subscribe to:
112+
# https://github.com/pypi/warehouse/issues/11096
113+
# https://github.com/pypa/gh-action-pypi-publish/issues/166
114+
publish:
115+
needs:
116+
- variables
117+
- release
118+
119+
strategy:
120+
matrix:
121+
publish-data: ${{ fromJSON(needs.variables.outputs.publish-data) }}
122+
123+
name: Publish on ${{ matrix.publish-data.registry }}
124+
runs-on: ubuntu-latest
125+
126+
if: ${{ needs.release.outputs.new-version-released == 'true' }}
127+
128+
environment:
129+
name: ${{ matrix.publish-data.environment-name }}
130+
url: https://${{ matrix.publish-data.hostname }}/p/${{ inputs.package-name }}
131+
132+
permissions:
133+
contents: read
134+
id-token: write
135+
136+
steps:
137+
- !step
138+
name: Setup | Download Build Artifacts
139+
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
140+
id: artifact-download
141+
with:
142+
name: ${{ inputs.distribution-artifacts-name }}
143+
path: ${{ inputs.distribution-artifacts-dir }}
144+
145+
- !step
146+
name: Publish Package Distributions to ${{ matrix.publish-data.registry }}
147+
uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # v1.13.0
148+
with:
149+
packages-dir: ${{ inputs.distribution-artifacts-dir }}
150+
print-hash: true
151+
verbose: true
152+
repository-url: ${{ matrix.publish-data.publish-api-url }}

.github/workflows/release.yml

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
name: Release
2+
3+
on:
4+
workflow_call:
5+
inputs:
6+
new-release-detected:
7+
required: true
8+
type: string
9+
semantic-release-config-file:
10+
required: true
11+
type: string
12+
distribution-artifacts-name:
13+
required: true
14+
type: string
15+
distribution-artifacts-dir:
16+
required: true
17+
type: string
18+
lockfile-artifact:
19+
required: true
20+
type: string
21+
22+
outputs:
23+
new-version-released:
24+
value: ${{ jobs.release.outputs.released }}
25+
new-release-version:
26+
value: ${{ jobs.release.outputs.version }}
27+
new-release-tag:
28+
value: ${{ jobs.release.outputs.tag }}
29+
30+
31+
jobs:
32+
release:
33+
name: Release on GitHub
34+
runs-on: ubuntu-latest
35+
36+
if: ${{ inputs.new-release-detected == 'true' }}
37+
38+
concurrency:
39+
group: ${{ github.workflow }}-release-${{ github.ref_name }}
40+
cancel-in-progress: false
41+
42+
permissions:
43+
contents: write
44+
45+
outputs:
46+
released: ${{ steps.release.outputs.released }}
47+
new-release-version: ${{ steps.release.outputs.version }}
48+
new-release-tag: ${{ steps.release.outputs.tag }}
49+
50+
env:
51+
UV_NO_MANAGED_PYTHON: true
52+
53+
steps:
54+
- !step
55+
name: Setup | Checkout Repository on Release Branch
56+
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
57+
with:
58+
ref: ${{ github.ref_name }}
59+
fetch-depth: 0
60+
61+
- name: Setup | Force release branch to be at workflow sha
62+
run: git reset --hard ${{ github.sha }}
63+
64+
- !step
65+
name: Setup | Install Python
66+
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
67+
with:
68+
python-version-file: .python-version
69+
70+
- !step
71+
name: Setup | Install uv
72+
uses: astral-sh/setup-uv@eb1897b8dc4b5d5bfe39a428a8f2304605e0983c # v7.0.0
73+
- name: Setup | Install python-semantic-release
74+
run: uv tool install python-semantic-release
75+
76+
- name: Setup | Install Project
77+
run: uv sync
78+
79+
- !step
80+
name: Setup | Download Build Artifacts
81+
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
82+
id: artifact-download
83+
with:
84+
name: ${{ inputs.distribution-artifacts-name }}
85+
path: ${{ inputs.distribution-artifacts-dir }}
86+
87+
- !step
88+
name: Setup | Download Lock File Artifact
89+
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
90+
with:
91+
name: ${{ inputs.lockfile-artifact }}
92+
93+
- name: Setup | Stage Lock File for Version Commit
94+
run: git add ${{ inputs.lockfile-artifact }}
95+
96+
- name: Release | Create Release
97+
id: release
98+
shell: bash
99+
env:
100+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
101+
run: |
102+
./.github/workflows/verify-upstream-has-not-changed.sh
103+
uv run -- semantic-release --config ${{ inputs.semantic-release-config-file }} --verbose --strict version --skip-build
104+
uv run -- semantic-release --config ${{ inputs.semantic-release-config-file }} publish

0 commit comments

Comments
 (0)