diff --git a/.github/workflows/nightly-build.yml b/.github/workflows/nightly-build.yml index 4c9bcf6e4a..8b902b0f47 100644 --- a/.github/workflows/nightly-build.yml +++ b/.github/workflows/nightly-build.yml @@ -2,13 +2,15 @@ # REF: # 1. https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstrategymatrixinclude # 2. https://github.com/JasonEtco/create-an-issue +# 3. https://docs.github.com/en/actions/learn-github-actions/variables +# 4. https://github.com/actions/github-script # name: Nightly Build on: # push: # branches: - # - feature/release + # - main schedule: - cron: '0 3 * * *' # run at 3 AM UTC @@ -17,6 +19,58 @@ defaults: shell: bash jobs: + prepare: + name: Prepare + if: github.repository == 'nushell/nightly' + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Set Outputs of Short SHA + id: vars + run: echo "sha_short=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT + + - name: Setup Nushell + uses: hustcer/setup-nu@v3 + with: + version: 0.79.0 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Prepare for Nightly Release + shell: nu {0} + run: | + cd $env.GITHUB_WORKSPACE + git checkout main + git config --global user.name 'hustcer' + git config --global user.email 'hustcer@outlook.com' + let tag_name = 'nightly-${{ steps.vars.outputs.sha_short }}' + git fetch origin -p + if (git ls-remote --tags origin $tag_name | is-empty) { + git tag -a $tag_name -m $'Nightly build from ($env.GITHUB_SHA)' + git push origin --tags + } + + # Keep the last a few releases + # Should only run in nushell/nightly repo + - name: Delete Older Releases + shell: nu {0} + run: | + let KEEP_COUNT = 7 + let deprecated = (http get https://api.github.com/repos/nushell/nightly/releases | sort-by -r created_at | select tag_name id | range $KEEP_COUNT..) + for release in $deprecated { + print $'Deleting tag ($release.tag_name)' + git push origin --delete $release.tag_name + print $'Deleting release ($release.tag_name)' + let delete_url = $'https://api.github.com/repos/nushell/nightly/releases/($release.id)' + # let version = [X-GitHub-Api-Version 2022-11-28] + # let auth = [Authorization 'Bearer ${{ secrets.GITHUB_TOKEN }}'] + # let accept = [Accept 'application/vnd.github+json'] + # http delete $delete_url -H $version -H $auth -H $accept + curl -L -X DELETE -H "Accept: application/vnd.github+json" -H "Authorization: Bearer " -H "X-GitHub-Api-Version: 2022-11-28" $delete_url + } + all: name: All @@ -111,3 +165,27 @@ jobs: update_existing: true search_existing: open filename: .github/ISSUE_TEMPLATE/nightly-build-fail.md + + - name: Set Outputs of Short SHA + id: vars + run: | + echo "date=$(date -u +'%Y-%m-%d')" >> $GITHUB_OUTPUT + echo "sha_short=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT + + # REF: https://github.com/marketplace/actions/gh-release + # Create a release only in nushell/nightly repo + - name: Publish Archive + uses: softprops/action-gh-release@v0.1.13 + if: ${{ startsWith(github.repository, 'nushell/nightly') }} + with: + draft: false + prerelease: true + name: Nu-nightly-${{ steps.vars.outputs.date }}-${{ steps.vars.outputs.sha_short }} + tag_name: nightly-${{ steps.vars.outputs.sha_short }} + body: | + This is a nightly build of Nushell. + It is not recommended for production use. + release from ${{ github.sha }} + files: ${{ steps.nu.outputs.archive }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}