diff --git a/.github/workflows/_release.yml b/.github/workflows/_release.yml index 3034129009e..d416f304ef6 100644 --- a/.github/workflows/_release.yml +++ b/.github/workflows/_release.yml @@ -72,10 +72,67 @@ jobs: run: | echo pkg-name="$(poetry version | cut -d ' ' -f 1)" >> $GITHUB_OUTPUT echo version="$(poetry version --short)" >> $GITHUB_OUTPUT + release-notes: + needs: + - build + runs-on: ubuntu-latest + outputs: + release-body: ${{ steps.generate-release-body.outputs.release-body }} + steps: + - uses: actions/checkout@v4 + with: + repository: langchain-ai/langchain + path: langchain + sparse-checkout: | # this only grabs files for relevant dir + ${{ inputs.working-directory }} + ref: master # this scopes to just master branch + fetch-depth: 0 # this fetches entire commit history + - name: Check Tags + id: check-tags + shell: bash + working-directory: langchain/${{ inputs.working-directory }} + env: + PKG_NAME: ${{ needs.build.outputs.pkg-name }} + VERSION: ${{ needs.build.outputs.version }} + run: | + REGEX="^$PKG_NAME==\\d+\\.\\d+\\.\\d+\$" + echo $REGEX + PREV_TAG=$(git tag --sort=-creatordate | grep -P $REGEX | head -1) + TAG="${PKG_NAME}==${VERSION}" + if [ "$TAG" == "$PREV_TAG" ]; then + echo "No new version to release" + exit 1 + fi + echo tag="$TAG" >> $GITHUB_OUTPUT + echo prev-tag="$PREV_TAG" >> $GITHUB_OUTPUT + - name: Generate release body + id: generate-release-body + working-directory: langchain + env: + WORKING_DIR: ${{ inputs.working-directory }} + PKG_NAME: ${{ needs.build.outputs.pkg-name }} + TAG: ${{ steps.check-tags.outputs.tag }} + PREV_TAG: ${{ steps.check-tags.outputs.prev-tag }} + run: | + PREAMBLE="Changes since $PREV_TAG" + # if PREV_TAG is empty, then we are releasing the first version + if [ -z "$PREV_TAG" ]; then + PREAMBLE="Initial release" + PREV_TAG=$(git rev-list --max-parents=0 HEAD) + fi + { + echo 'release-body<> "$GITHUB_OUTPUT" test-pypi-publish: needs: - build + - release-notes uses: ./.github/workflows/_test_release.yml with: @@ -86,6 +143,7 @@ jobs: pre-release-checks: needs: - build + - release-notes - test-pypi-publish runs-on: ubuntu-latest steps: @@ -229,6 +287,7 @@ jobs: publish: needs: - build + - release-notes - test-pypi-publish - pre-release-checks runs-on: ubuntu-latest @@ -270,6 +329,7 @@ jobs: mark-release: needs: - build + - release-notes - test-pypi-publish - pre-release-checks - publish @@ -306,6 +366,6 @@ jobs: token: ${{ secrets.GITHUB_TOKEN }} generateReleaseNotes: false tag: ${{needs.build.outputs.pkg-name}}==${{ needs.build.outputs.version }} - body: "# Release ${{needs.build.outputs.pkg-name}}==${{ needs.build.outputs.version }}\n\nPackage-specific release note generation coming soon." + body: ${{ needs.release-notes.outputs.release-body }} commit: ${{ github.sha }} makeLatest: ${{ needs.build.outputs.pkg-name == 'langchain-core'}}