From c8556c3af812f33499e607361b424c47d0fa6d2c Mon Sep 17 00:00:00 2001 From: Joshua Sing Date: Fri, 15 Dec 2023 16:36:25 +1100 Subject: [PATCH] ci: clean up release workflow --- .github/scripts/changelog.sh | 74 +++++++++++++++++++++++++ .github/workflows/release.yml | 81 ++++++++++++++++++++++++++++ .github/workflows/release_by_tag.yml | 66 ----------------------- 3 files changed, 155 insertions(+), 66 deletions(-) create mode 100644 .github/scripts/changelog.sh create mode 100644 .github/workflows/release.yml delete mode 100644 .github/workflows/release_by_tag.yml diff --git a/.github/scripts/changelog.sh b/.github/scripts/changelog.sh new file mode 100644 index 0000000000..76492cf8a5 --- /dev/null +++ b/.github/scripts/changelog.sh @@ -0,0 +1,74 @@ +#!/bin/sh +# Copyright (c) 2023 Joshua Sing +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +# +# Usage: changelog.sh +# Reads the changelog for the specified version from the changelog file. +# The output will be reformatted for use in GitHub releases. +# +# The changelog file defaults to "ChangeLog", but can be changed by setting +# the environment variable $CHANGELOG_FILE +# + +set -e + +# Check if the version argument is provided +if [ "$#" -ne 1 ]; then + echo "Usage: $0 " + exit 1 +fi + +version="${1#v}" +changelog_file="${CHANGELOG_FILE:-ChangeLog}" +found_version=false +changelog="" + +# Check if the specified changelog file exists +if [ ! -f "$changelog_file" ]; then + echo "Error: Changelog file '$changelog_file' not found" + exit 1 +fi + +# Read the changelog file line by line +while IFS= read -r line; do + # Check for the version line + if echo "$line" | grep -Eq "^${version} - "; then + found_version=true + continue + fi + + # Continue reading the changelog until the next version or end of file, + # skipping empty lines + if $found_version; then + echo "$line" | grep -Eq "^\s*$" && continue + echo "$line" | grep -Eq "^[0-9]+\.[0-9]+\.[0-9]+ - " && break + changelog="${changelog}${line}\n" + fi +done < "$changelog_file" + +# If the specified version was not found, print an error +if ! $found_version; then + echo "Error: Version $version was not found in changelog" + exit 1 +fi + +# Tidy up the changelog for displaying on GitHub +changelog=$(echo "$changelog" | sed -e 's/^\t\*/###/' -e 's/^\t//') + +# Print the changelog for the specified version +echo "$changelog" +echo +echo "Full changelog: https://github.com/libressl/portable/blob/master/ChangeLog" +exit 0 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000000..8230b8222c --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,81 @@ +# GitHub Actions workflow to create releases from tags. +name: "Release" + +on: + push: + tags: [ "v*" ] + +permissions: + contents: write + +jobs: + release: + name: "Release" + runs-on: "ubuntu-latest" + outputs: + upload_url: "${{ steps.create_release.outputs.upload_url }}" + steps: + - name: "Checkout repository" + uses: actions/checkout@v4 + + - name: "Generate version changelog" + run: .github/scripts/changelog.sh "$VERSION" > release-changelog.txt + env: + VERSION: "${{ github.ref_name }}" + + - name: "Create GitHub release" + id: create_release + uses: softprops/action-gh-release@v1 + with: + body_path: "${{ github.workspace }}/release-changelog.txt" + + build-windows: + name: "${{ matrix.os }}/${{ matrix.arch }}" + runs-on: "${{ matrix.os }}" + needs: ["release"] + strategy: + matrix: + os: [ "windows-2022" ] + arch: [ "Win32", "x64", "ARM64" ] + steps: + - name: "Checkout repository" + uses: actions/checkout@v4 + + - name: "Setup MSYS2" + uses: msys2/setup-msys2@v2 + with: + update: true + install: >- + autoconf + automake + diffutils + libtool + gcc + git + patch + perl + + - shell: msys2 {0} + run: ./autogen.sh + + - shell: cmd + run: cmake -Bbuild -G "Visual Studio 17 2022" -A ${{ matrix.arch }} -DCMAKE_INSTALL_PREFIX=local + + - shell: cmd + run: cmake --build build --config Release + + - shell: cmd + run: cmake --install build --config Release + + - shell: pwsh + run: Compress-Archive -Path local\* local.zip + + - name: "Upload release artifact" + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: "${{ github.token }}" + with: + upload_url: "${{ needs.release.outputs.upload_url }}" + asset_path: "local.zip" + asset_name: "libressl_${{ github.ref_name }}_windows_${{ matrix.arch }}.zip" + asset_content_type: "application/zip" diff --git a/.github/workflows/release_by_tag.yml b/.github/workflows/release_by_tag.yml deleted file mode 100644 index de05254480..0000000000 --- a/.github/workflows/release_by_tag.yml +++ /dev/null @@ -1,66 +0,0 @@ - -on: - push: - tags: [ "v*" ] - -permissions: - contents: write - -jobs: - release: - runs-on: ubuntu-latest - outputs: - upload_url: ${{ steps.create_release.outputs.upload_url }} - steps: - - id: create_release - uses: actions/create-release@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - tag_name: ${{ github.ref }} - release_name: Release ${{ github.ref }} - draft: false - prerelease: false - - build-windows: - needs: release - strategy: - matrix: - arch: [ Win32, x64, ARM64 ] - runs-on: windows-2022 - name: windows - ${{ matrix.arch }} - steps: - - uses: msys2/setup-msys2@v2 - with: - update: true - install: >- - autoconf - automake - diffutils - libtool - gcc - git - patch - perl - - uses: actions/checkout@main - - shell: msys2 {0} - run: ./autogen.sh - - shell: cmd - run: cmake -Bbuild -G "Visual Studio 17 2022" -A ${{ matrix.arch }} -DCMAKE_INSTALL_PREFIX=local - - shell: cmd - run: cmake --build build --config Release - - shell: cmd - run: cmake --install build --config Release - - shell: pwsh - run: | - Compress-Archive -Path local\* local.zip - - - name: upload release - uses: actions/upload-release-asset@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ needs.release.outputs.upload_url }} - asset_path: local.zip - asset_name: windows-${{ matrix.arch }}-${{ github.ref }}.zip - asset_content_type: application/zip