Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

auto release dependency updates #172

Merged
merged 2 commits into from
Apr 9, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@ updates:
directory: "/"
schedule:
interval: "weekly"
- package-ecosystem: docker
directory: /cicd
schedule:
interval: daily

# version updates: disabled
# security updates: enabled
Expand Down
88 changes: 88 additions & 0 deletions .github/workflows/deps-release-detect.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
name: Deps Release

on: 'pull_request'

permissions:
contents: write

jobs:
detect:
name: Detect
runs-on: ubuntu-latest
if: ${{ github.actor == 'dependabot[bot]' }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Configure Git
run: |
git config user.name "$GITHUB_ACTOR"
git config user.email "[email protected]"
git checkout -b "$GITHUB_HEAD_REF"

- name: Dependabot metadata
id: dependabot-metadata
uses: dependabot/fetch-metadata@v2

- name: Install node
uses: actions/setup-node@v4
with:
node-version: 18

- name: Install semver
run: |-
npm install -g semver

- name: Bump
run: |-
set -e
push=0
config='[
{
"directory": "cicd",
"dependencyName": "alpine"
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wonder if the dependency name will actually be library/alpine

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure off the top of my head, it definitely could be

}
]'

deps='${{ steps.dependabot-metadata.outputs.updated-dependencies-json }}'

for i in $(seq 0 "$(("$(echo "$config" | jq length) - 1"))"); do
directory="$(echo "$config" | jq -r ".[$i].directory")"
dependencyName="$(echo "$config" | jq -r ".[$i].dependencyName")"
match="$(echo "$deps" | jq ".[] | select(.directory == \"/$directory\" and .dependencyName == \"$dependencyName\")")"
if [ -z "$match" ]; then
continue
fi

updateType="$(echo "$match" | jq -r ".updateType")"
prevVersion="$(echo "$match" | jq -r ".prevVersion")"
newVersion="$(echo "$match" | jq -r ".newVersion")"

echo "directory : $directory"
echo "dependencyName : $dependencyName"
echo "updateType : $updateType"
echo "prevVersion : $prevVersion"
echo "newVersion : $newVersion"

tagPrevVersion="$(git ls-remote 2>/dev/null \
| grep -oE 'refs/tags/v[0-9]+\.[0-9]+\.[0-9]+' \
| cut -d'/' -f3 \
| xargs semver \
| tail -n 1)"

tagNewVersion="$(semver -i patch "$tagPrevVersion")"

echo "$tagPrevVersion" > ./cicd/tag-deps-version.txt
echo "$tagNewVersion" >> ./cicd/tag-deps-version.txt

git add ./cicd/tag-base-version.txt
if git commit -m "bump dependency release to $tagNewVersion"; then
push=1
fi
done

if [ "$push" = "1" ]; then
git push -u origin "$GITHUB_HEAD_REF"
fi
56 changes: 56 additions & 0 deletions .github/workflows/deps-release-tag.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
name: Deps Release

on:
push:
branches:
- main

permissions:
contents: write

jobs:
tag:
name: Tag
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Configure Git
run: |
git config user.name "$GITHUB_ACTOR"
git config user.email "[email protected]"

- id: tag
name: Determine tag
run: |
old_version="$(head -n 1 ./cicd/tag-deps-version.txt)"
old_ref_name="v$old_version"
new_version="$(tail -n 1 ./cicd/tag-deps-version.txt)"
new_ref_name="v$new_version"

create=true
if [ "$(git ls-remote origin "refs/tags/$new_ref_name" | wc -l)" = "1" ]; then
create=false
fi

echo "old-version=$old_version" | tee -a "$GITHUB_OUTPUT"
echo "old-ref-name=$old_ref_name" | tee -a "$GITHUB_OUTPUT"
echo "new-version=$new_version" | tee -a "$GITHUB_OUTPUT"
echo "new-ref-name=$new_ref_name" | tee -a "$GITHUB_OUTPUT"
echo "create=$create" | tee -a "$GITHUB_OUTPUT"

- if: ${{ fromJSON(steps.tag.outputs.create) }}
name: Tag
run: |
commit="$(git rev-parse HEAD)"
git fetch origin refs/tags/"${{ steps.tag.outputs.old-ref-name }}"
git checkout -b deps "${{ steps.tag.outputs.old-ref-name }}"
git restore --source="$commit" ./cicd
git add ./cicd
if git commit -m "bump dependency release to ${{ steps.tag.outputs.new-version }}"; then
git tag "${{ steps.tag.outputs.new-ref-name }}"
git push origin "${{ steps.tag.outputs.new-ref-name }}"
fi
4 changes: 2 additions & 2 deletions cicd/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#syntax=docker/dockerfile-upstream:1.5
ARG GO_APP

FROM alpine:3.19 as deps
FROM alpine:3.19.0 as deps

ARG GO_APP
ARG GORELEASER_DIST_DIR=/go/src/dist
Expand All @@ -28,7 +28,7 @@ RUN <<EOT
cp ${BIN_PATH} /go/bin
EOT

FROM alpine:3.19
FROM alpine:3.19.0

ARG GO_APP
ENV GO_APP ${GO_APP}
Expand Down
2 changes: 2 additions & 0 deletions cicd/tag-deps-version.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
0.14.0
0.14.1
Loading