2 Commits

Author SHA1 Message Date
e1c218431a DEBUG REVERTME
All checks were successful
run tests / check (push) Successful in 25s
run tests / release (push) Successful in 19s
check if project is already released / unittest (push) Successful in 13s
2025-12-11 11:01:20 +01:00
c33b8aae0c WIP
All checks were successful
run tests / check (push) Successful in 27s
run tests / release (push) Successful in 19s
2025-12-11 10:56:28 +01:00
11 changed files with 88 additions and 26 deletions

View File

@@ -0,0 +1,11 @@
name: check if project is already released
on:
- pull_request
- push # TODO test
jobs:
unittest:
runs-on: action-runner
steps:
- uses: actions/checkout@v4
- uses: ./check-is-not-released

View File

@@ -67,6 +67,26 @@ jobs:
with:
configure_runner_environment: false
test-skip-release-if-already-released:
runs-on: action-runner
steps:
- uses: actions/checkout@v4
# skip login locally
- if: github.repository == 'actions/release'
uses: https://gitea.puzzleyou.net/actions/configure-runner-environment@master
- uses: ./declare
with:
configure_runner_environment: false
version_descriptor: test-assets/Cargo.toml
- uses: ./release
with:
configure_runner_environment: false
dry_run: true
sync_versions: false
test-declare-with-release-yaml:
runs-on: action-runner
steps:
@@ -80,6 +100,7 @@ jobs:
with:
dry_run: true
configure_runner_environment: false
sync_versions: false
- run: set -u; echo "$RELEASE_PROJECT_CURRENT_VERSION"

View File

@@ -33,15 +33,11 @@ runs:
run: |
set +e
nix run ${{ github.action_path }} -- \
dump \
--state "${RELEASE_ACTION_STATEFILE}" \
| grep "is already released: True"
IS_RELEASED_EXIT_CODE=$?
if [[ "$IS_RELEASED_EXIT_CODE" -eq 0 ]]; then
if [[ "$RELEASE_PROJECT_IS_RELEASED" = "1" ]]; then
VERSION="$RELEASE_PROJECT_CURRENT_VERSION"
echo "Project is already released with version ${VERSION}."
echo "You should increment the project version."
echo "If you don't, then the project will not be released."
exit -1
else
echo "Project is not yet released."

View File

@@ -104,6 +104,11 @@ runs:
- name: declare release project
run: |
if [[ ! -z "${RELEASE_PROJECT_CURRENT_VERSION}" ]]; then
echo "already set up."
exit 0
fi
nix run ${{ github.action_path }} -- \
declare \
--release-yaml-filename "${{ inputs.filename }}" \

View File

@@ -34,7 +34,10 @@ test-workflows:
--image "-self-hosted" \
--event pull_request \
--workflows ./.gitea/workflows/check.yaml \
--job test-sync-versions
--job test-skip-release-if-already-released
# TODO
# --image "europe-docker.pkg.dev/puzzle-and-play/docker/action-runner-job:latest" \
act_runner exec \
--image "-self-hosted" \
--event pull_request \
--workflows ./.gitea/workflows/check.yaml \
--job test-sync-versions

View File

@@ -18,7 +18,7 @@ inputs:
sync_versions:
required: false
default: false
default: true
runs:
using: composite
@@ -43,18 +43,28 @@ runs:
--release-commit-sha "${{ github.sha }}" \
--write-env-vars-to-filename "$GITHUB_ENV"
- name: check if already released
id: check_released
run: |
if [[ "$RELEASE_PROJECT_IS_RELEASED" == "1" ]] && [[ "$RELEASE_IS_PRERELEASE" == "0" ]]; then
echo "is_released=1" >> "$GITHUB_OUTPUT"
else
echo "is_released=0" >> "$GITHUB_OUTPUT"
fi
- name: sync versions
if: inputs.sync_versions == 'true'
if: ${{ steps.check_released.outputs.is_released == '0' && inputs.sync_versions == 'true' }}
run: |
nix run ${{ github.action_path }} -- \
sync-versions \
--state "${RELEASE_ACTION_STATEFILE}"
- name: run build commands
if: inputs.build_run != ''
if: ${{ steps.check_released.outputs.is_released == '0' && inputs.build_run != '' }}
run: ${{ inputs.build_run }}
- name: publish artefacts
if: ${{ steps.check_released.outputs.is_released == '0' }}
run: |
nix run ${{ github.action_path }} -- \
publish-artefacts \
@@ -62,6 +72,7 @@ runs:
--dry-run "${{ inputs.dry_run }}"
- name: update deployments
if: ${{ steps.check_released.outputs.is_released == '0' }}
run: |
nix run ${{ github.action_path }} -- \
update-deployments \
@@ -69,6 +80,7 @@ runs:
--dry-run "${{ inputs.dry_run }}"
- name: create release
if: ${{ steps.check_released.outputs.is_released == '0' }}
run: |
nix run ${{ github.action_path }} -- \
create-release \

View File

@@ -2,5 +2,5 @@ from setuptools import setup
setup(
name='release-action',
version='0.0.1.dev0',
version='0.0.2',
)

View File

@@ -262,7 +262,7 @@ class ProjectDescription:
if self.gitea_tool is None:
return None
return self.gitea_tool.is_released(self.planned_version)
return self.gitea_tool.is_released(self.project_version)
@cached_property
def gitea_tool(self):
@@ -302,6 +302,8 @@ class ProjectDescription:
str(self.project_version),
'RELEASE_PROJECT_PLANNED_VERSION':
str(self.planned_version),
'RELEASE_PROJECT_IS_RELEASED':
'1' if self.is_released else '0',
}]
))

View File

@@ -150,19 +150,19 @@ def update_helm_release(info: HelmReleaseInfo, cli: Cli):
'--version', chart_version,
'-d', td)
chart_filename = '%s/%s-%s.tgz' % (td, chart_name, chart_version)
chart_filename = '%s/%s-%s.tgz' % (td, chart_name, chart_version)
value_overrides = ','.join(
map(lambda t: '%s=%s' % (t, info.image_tag), info.image_paths))
value_overrides = ','.join(
map(lambda t: '%s=%s' % (t, info.image_tag), info.image_paths))
cli('helm',
'upgrade', info.release_name,
chart_filename,
'--version', chart_version,
'--namespace', info.namespace,
'--reuse-values',
'--set', value_overrides,
'--timeout', info.timeout)
cli('helm',
'upgrade', info.release_name,
chart_filename,
'--version', chart_version,
'--namespace', info.namespace,
'--reuse-values',
'--set', value_overrides,
'--timeout', info.timeout)
def update_deployments(project: ProjectDescription, dry_run: bool = False):

View File

@@ -1,5 +1,6 @@
from os import path
from unittest import TestCase
from unittest.mock import patch
import yaml
from semver import Version
@@ -14,6 +15,14 @@ from release.project import (ArtefactDescription, DeploymentCondition,
WheelReleaseInfo, parse_project_description)
class MockGiteaTool:
def __init__(self, *args, **kwargs):
pass
def is_released(self, version):
return False
class TestProjectDescription(TestCase):
def test_can_describe_projects(self):
# resi-lib
@@ -136,6 +145,7 @@ class TestProjectDescription(TestCase):
namespace='prngl-testing'))
])
@patch('release.project.toolkit.Gitea', MockGiteaTool)
def test_environment_variables(self):
# motacilla
desc = ProjectDescription(
@@ -184,6 +194,7 @@ class TestProjectDescription(TestCase):
'RELEASE_IMAGE_LOCAL_NAME_MOTACILLA_CDN':
'motacilla-cdn:0AB123',
'RELEASE_IS_PRERELEASE': '1',
'RELEASE_PROJECT_IS_RELEASED': '0',
'RELEASE_PROJECT_CURRENT_VERSION': '2.10.4',
'RELEASE_PROJECT_PLANNED_VERSION': '2.10.4-dev42'
}

View File

@@ -47,6 +47,7 @@ class Structured:
for part in item_path:
cur = cur[part]
self.filename = filename
self.format = format
self.item_path = item_path
self.content = obj