current commit
261101.4 · tools: avoid rewriting same-version OpenSSL updates
name: OpenSSL update
on:
  schedule:
    # Run once a week at 00:05 AM UTC on Sunday.
    - cron: 5 0 * * 0

  workflow_dispatch:
    inputs:
      include_prereleases:
        description: Include prereleases
        type: boolean
        default: false

permissions:
  contents: read
  pull-requests: read

jobs:
  openssl-update:
    if: github.repository == 'nodejs/node'
    name: OpenSSL update (${{ github.ref_name }})
    # Cannot use ubuntu-slim here because the update script requires Docker
    runs-on: ubuntu-latest
    concurrency:
      group: openssl-update-${{ github.ref_name }}
      cancel-in-progress: false
    env:
      TARGET_BRANCH: ${{ github.ref_name }}
      DEFAULT_BRANCH: ${{ github.event.repository.default_branch }}
      PR_BRANCH: actions/${{ github.ref_name != github.event.repository.default_branch && format('{0}/', github.ref_name) || '' }}tools-update-openssl
    steps:
      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1  # v7.0.1
        with:
          persist-credentials: false
      - name: Setup Git config
        run: |
          git config user.name "Node.js GitHub Bot"
          git config user.email "github-bot@iojs.org"
          if [ "$TARGET_BRANCH" != "$DEFAULT_BRANCH" ]; then
            echo "PR_TITLE_PREFIX=[${TARGET_BRANCH%-staging}] " >> "$GITHUB_ENV"
          fi
      - name: Apply existing OpenSSL update
        if: github.event_name != 'workflow_dispatch'
        shell: bash
        run: |
          commit_list=$(gh pr list --repo "$GITHUB_REPOSITORY" \
            --head "$PR_BRANCH" --base "$TARGET_BRANCH" --state open \
            --json commits,isCrossRepository \
            --jq 'first(.[] | select(.isCrossRepository | not)).commits[]?.oid')
          if [ -n "$commit_list" ]; then
            git fetch --depth=2 --no-tags origin $commit_list
            git cherry-pick --empty=drop $commit_list
          fi
        env:
          GH_TOKEN: ${{ github.token }}
      - name: Check and download new OpenSSL version
        run: |
          ./tools/dep_updaters/update-openssl.sh download \
          | tee /dev/stderr \
          | tail -n1 \
          | sed -n '/^NEW_VERSION=/p' >> "$GITHUB_ENV"
        shell: bash
        env:
          GITHUB_TOKEN: ${{ secrets.GH_USER_TOKEN }}
          INCLUDE_PRERELEASES: ${{ github.event_name == 'workflow_dispatch' && inputs.include_prereleases }}
      - name: Commit OpenSSL sources
        if: env.NEW_VERSION
        run: |
          git add -A deps/openssl/openssl
          git commit -m "deps: upgrade openssl sources to openssl-$NEW_VERSION"
      - name: Regenerate platform specific files
        if: env.NEW_VERSION
        run: |
          sudo apt update && sudo apt install -y nasm libtext-template-perl
          ./tools/dep_updaters/update-openssl.sh regenerate
        env:
          GITHUB_TOKEN: ${{ secrets.GH_USER_TOKEN }}
      - name: Commit generated files
        if: env.NEW_VERSION
        run: |
          git add -A deps/openssl
          git commit -m "deps: update archs files for openssl-$NEW_VERSION"
      - name: Create or update PR
        if: env.NEW_VERSION
        uses: peter-evans/create-pull-request@5f6978faf089d4d20b00c7766989d076bb2fc7f1  # v8.1.1
        with:
          token: ${{ secrets.GH_USER_TOKEN }}
          author: Node.js GitHub Bot <github-bot@iojs.org>
          committer: Node.js GitHub Bot <github-bot@iojs.org>
          body: This is an automated update of OpenSSL to ${{ env.NEW_VERSION }} for ${{ github.ref_name }}.
          branch: ${{ env.PR_BRANCH }}
          labels: dependencies, openssl
          title: '${{ env.PR_TITLE_PREFIX }}deps: update OpenSSL to ${{ env.NEW_VERSION }}'