diff --git a/.github/actions/release-changes/action.yml b/.github/actions/release-changes/action.yml deleted file mode 100644 index 7795382c5a2..00000000000 --- a/.github/actions/release-changes/action.yml +++ /dev/null @@ -1,58 +0,0 @@ ---- -name: release-changes -description: Create release changes diff -inputs: - salt-version: - type: string - required: true - description: The Salt version to set prior to creating the release changes - -env: - COLUMNS: 160 - -runs: - using: composite - - steps: - - - name: Update Debian changelog - shell: bash - run: | - tools changelog update-deb --draft - tools changelog update-deb - - - name: Update RPM changelog - shell: bash - run: | - tools changelog update-rpm --draft - tools changelog update-rpm - - - name: Update Release Notes - shell: bash - run: | - tools changelog update-release-notes --draft - tools changelog update-release-notes - - - name: Update CHANGELOG.md - shell: bash - run: | - tools changelog update-release-notes --draft - tools changelog update-release-notes - - - name: Update CHANGELOG.md - shell: bash - run: | - tools docs man - - - name: Create release changes diff - shell: bash - run: | - git diff --no-color > salt-${{ inputs.salt-version }}.diff - - - name: Upload Source Tarball as an Artifact - uses: actions/upload-artifact@v3 - with: - name: salt-${{ inputs.salt-version }}.diff - path: salt-${{ inputs.salt-version }}.diff - retention-days: 7 - if-no-files-found: error diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7b6bb079454..28d0bb5ceda 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -219,40 +219,22 @@ jobs: with: changed-files: ${{ needs.prepare-workflow.outputs.changed-files }} - release-changes: + prepare-release: name: Create Release Diff if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['github-hosted-runners'] }} needs: - prepare-workflow - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - - name: Set up Python 3.10 - uses: actions/setup-python@v4 - with: - python-version: "3.10" - - - name: Setup Python Tools Scripts - uses: ./.github/actions/setup-python-tools-scripts - - - name: Setup Salt Version - id: setup-salt-version - uses: ./.github/actions/setup-salt-version - with: - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - - - name: Generate Changes Diff - uses: ./.github/actions/release-changes - with: - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" + uses: ./.github/workflows/prepare-release.yml + with: + cache-seed: ${{ needs.prepare-workflow.outputs.cache-seed }} + salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" build-source-tarball: name: Build Source Tarball if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['github-hosted-runners'] }} needs: - prepare-workflow - - release-changes + - prepare-release runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml new file mode 100644 index 00000000000..cf731fa0479 --- /dev/null +++ b/.github/workflows/prepare-release.yml @@ -0,0 +1,98 @@ +name: Prepare Release + +on: + workflow_call: + inputs: + salt-version: + type: string + required: true + description: The Salt version to set prior to creating the release diff. + cache-seed: + required: true + type: string + description: Seed used to invalidate caches + python-version: + required: false + type: string + default: "3.10" + +env: + COLUMNS: 160 + PIP_INDEX_URL: https://pypi-proxy.saltstack.net/root/local/+simple/ + PIP_EXTRA_INDEX_URL: https://pypi.org/simple + +jobs: + build: + name: Prepare Release + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Set up Python ${{ inputs.python-version }} + uses: actions/setup-python@v4 + with: + python-version: "${{ inputs.python-version }}" + + - name: Cache Python Tools Virtualenvs + id: nox-dependencies-cache + uses: actions/cache@v3 + with: + path: .tools-venvs/ + key: ${{ inputs.cache-seed }}|${{ github.workflow }}|tools-venvs|${{ inputs.python-version }}|${{ hashFiles('requirements/**/*.txt') }} + + - name: Setup Python Tools Scripts + uses: ./.github/actions/setup-python-tools-scripts + + - name: Setup Salt Version + id: setup-salt-version + uses: ./.github/actions/setup-salt-version + with: + salt-version: "${{ inputs.salt-version }}" + + - name: Update Debian changelog + shell: bash + run: | + tools changelog update-deb --draft + tools changelog update-deb + + - name: Update RPM changelog + shell: bash + run: | + tools changelog update-rpm --draft + tools changelog update-rpm + + - name: Update Release Notes + shell: bash + run: | + tools changelog update-release-notes --draft + tools changelog update-release-notes + + - name: Generate MAN Pages + shell: bash + run: | + tools docs man + + - name: Update Changelog + shell: bash + run: | + tools changelog update-changelog-md --draft + tools changelog update-changelog-md + + - name: Show Changes Diff + shell: bash + run: | + git diff --color + + - name: Create release changes diff + shell: bash + run: | + git diff --no-color > salt-${{ inputs.salt-version }}.diff + + - name: Upload Source Tarball as an Artifact + uses: actions/upload-artifact@v3 + with: + name: salt-${{ inputs.salt-version }}.diff + path: salt-${{ inputs.salt-version }}.diff + retention-days: 7 + if-no-files-found: error diff --git a/tools/changelog.py b/tools/changelog.py index c1b578f06bd..2f7a401520d 100644 --- a/tools/changelog.py +++ b/tools/changelog.py @@ -36,7 +36,7 @@ cl = command_group( ) -def changelog(ctx: Context, version: str): +def _get_changelog_contents(ctx: Context, version: str): """ Return the full changelog generated by towncrier. """ @@ -49,11 +49,11 @@ def changelog(ctx: Context, version: str): ).stdout.decode() -def pkg_changelog(ctx: Context, version: str): +def _get_pkg_changelog_contents(ctx: Context, version: str): """ Return a version of the changelog entries suitable for packaged changelogs. """ - changes = changelog(ctx, version) + changes = _get_changelog_contents(ctx, version) changes = "\n".join(changes.split("\n")[2:]) changes = changes.replace( textwrap.dedent( @@ -108,7 +108,7 @@ def pkg_changelog(ctx: Context, version: str): return changes -def version(): +def _get_salt_version(): return ( subprocess.run( ["python3", "salt/version.py"], stdout=subprocess.PIPE, check=True @@ -136,8 +136,8 @@ def version(): ) def update_rpm(ctx: Context, salt_version: str, draft: bool = False): if salt_version is None: - salt_version = version() - changes = pkg_changelog(ctx, salt_version) + salt_version = _get_salt_version() + changes = _get_pkg_changelog_contents(ctx, salt_version) ctx.info("Salt version is %s", salt_version) orig = ctx.run( "sed", @@ -186,8 +186,8 @@ def update_rpm(ctx: Context, salt_version: str, draft: bool = False): ) def update_deb(ctx: Context, salt_version: str, draft: bool = False): if salt_version is None: - salt_version = version() - changes = pkg_changelog(ctx, salt_version) + salt_version = _get_salt_version() + changes = _get_pkg_changelog_contents(ctx, salt_version) formated = "\n".join([f" {_.replace('-', '*', 1)}" for _ in changes.split("\n")]) dt = datetime.datetime.utcnow() date = dt.strftime("%a, %d %b %Y %H:%M:%S +0000") @@ -229,14 +229,14 @@ def update_deb(ctx: Context, salt_version: str, draft: bool = False): ) def update_release_notes(ctx: Context, salt_version: str, draft: bool = False): if salt_version is None: - salt_version = version() + salt_version = _get_salt_version() if "+" in salt_version: major_version = salt_version.split("+", 1)[0] else: major_version = salt_version - changes = changelog(ctx, salt_version) + changes = _get_changelog_contents(ctx, salt_version) changes = "\n".join(changes.split("\n")[2:]) - tmpnotes = f"doc/topics/releases/{version}.rst.tmp" + tmpnotes = f"doc/topics/releases/{salt_version}.rst.tmp" try: with open(f"doc/topics/releases/{major_version}.rst") as rfp: existing = rfp.read() @@ -274,8 +274,8 @@ def update_release_notes(ctx: Context, salt_version: str, draft: bool = False): ) def generate_changelog_md(ctx: Context, salt_version: str, draft: bool = False): if salt_version is None: - salt_version = version() - cmd = ["towncrier", "build", f"--version={version}"] + salt_version = _get_salt_version() + cmd = ["towncrier", "build", f"--version={salt_version}"] if draft: cmd += ["--draft"] else: