diff --git a/.github/workflows/update.yml b/.github/workflows/update.yml new file mode 100644 index 0000000..2fb4f26 --- /dev/null +++ b/.github/workflows/update.yml @@ -0,0 +1,78 @@ +name: Update Elastic release + +on: + schedule: + - cron: '0 0 * * 0' # At 00:00 every Sunday + +jobs: + + check-and-update: + name: Check and update Elastic release + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + + - uses: actions/setup-node@v2 + - run: npm install semver + + - name: Get latest release version + uses: actions/github-script@v5 + id: get-latest-release + with: + script: | + const semver = require('semver') + + const latestVersion = await github. + paginate(github.rest.repos.listReleases, { + owner: 'elastic', + repo: 'elasticsearch' + }) + .then(releases => { + for (const release of releases) { + // Results are returned sorted by created_at, so it is safe to assume + // that the first encountered match is also the series' latest release. + + const version=semver.clean(release.tag_name) + + if (semver.satisfies(version, '7.x')) { + return version + } + } + }); + + if (latestVersion) { + // Return an object so that the result can be handled as structured data + // instead of a quoted string in subsequent steps. + return { version: latestVersion } + } + + - name: Update stack version + id: update-files + if: steps.get-latest-release.outputs.result + run: | + source .env + cur_ver="$ELK_VERSION" + new_ver=${{ fromJson(steps.get-latest-release.outputs.result).version }} + + # Escape dot characters so sed interprets them as literal dots + cur_ver="$(echo $cur_ver | sed 's/\./\\./g')" + + for f in .env docker-stack.yml README.md; do + sed -i "s/${cur_ver}/${new_ver}/g" "$f" + done + + git_status="$(git status --porcelain)" + if [[ ${git_status} ]]; then + echo -e 'Changes to be committed:\n' + echo "${git_status}" + echo '::set-output name=has_changes::true' + fi + + - name: Send pull request to update to new version + if: steps.update-files.outputs.has_changes + uses: peter-evans/create-pull-request@v3 + with: + commit-message: Update to v${{ fromJson(steps.get-latest-release.outputs.result).version }} + title: Update to v${{ fromJson(steps.get-latest-release.outputs.result).version }} + delete-branch: true diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..753765e --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +# Node.js artifacts created by certain GitHub Actions +/node_modules/ +/package-lock.json