dragonfly/.github/workflows/docker-release.yml
Roman Gershman f7292de4e7
chore: Introduce fiber stack allocator (#2730)
1. Use clib malloc for allocating fiber stacks but reduce the fiber stack size.
   clib malloc uses default 4K OS pages when reserving memory from the OS.
   The reason for not using mi_malloc, because we use 2MB large OS pages with mimalloc.
   However, allocating stacks is one of the cases, when using smaller 4KB memory pages is actually more
   RSS efficient because memory pages become hot at better granularity.

2. Add "memory_fiberstack_vms_bytes" metric exposing fiber stack vm usage.
3. Fix macos dependencies & update ci versions.

Signed-off-by: Roman Gershman <roman@dragonflydb.io>
2024-03-18 13:51:33 +02:00

125 lines
4.0 KiB
YAML

name: docker release
on:
workflow_dispatch:
inputs:
TAG_NAME:
description: 'Tag name that the major tag will point to'
required: true
PRERELEASE:
description: 'Whether this is a prerelease'
type: boolean
required: true
release:
types: [published]
permissions:
packages: write
contents: write
id-token: write
env:
TAG_NAME: ${{ github.event.inputs.TAG_NAME || github.event.release.tag_name }}
IS_PRERELEASE: ${{ github.event.release.prerelease || github.event.inputs.PRERELEASE }}
jobs:
# This workaround is needed, as it's not possible to reference env.FOOBAR directly at this stage
# - for ex. https://github.com/actions/runner/issues/1189
release-container-prereq:
runs-on: ubuntu-latest
outputs:
tag: ${{ steps.release-param.outputs.tag }}
tag_latest: ${{ steps.release-param.outputs.tag_latest }}
steps:
- id: release-param
run: |
# If env.IS_PRERELEASE is true, set tag to alpha and do not enable tag_latest
# If env.IS_PRERELEASE is not true (aka false), don't set an extra tag and enable tag_latest
echo "tag=${{ env.IS_PRERELEASE == 'true' && 'alpha' }}" >> $GITHUB_OUTPUT
echo "tag_latest=${{ env.IS_PRERELEASE == 'true' && 'false' || 'true' }}" >> $GITHUB_OUTPUT
release-container:
needs: release-container-prereq
uses: ./.github/workflows/reusable-container-workflow.yaml
with:
build_type: prod
tag: ${{ needs.release-container-prereq.outputs.tag }}
tag_latest: ${{ needs.release-container-prereq.outputs.tag_latest == 'true' }}
image: ghcr.io/${{ github.repository }}
registry: ghcr.io
registry_username: ${{ github.repository_owner }}
fetch_release: true
release_version: ${{ github.event.inputs.TAG_NAME || github.event.release.tag_name }}
secrets:
registry_password: ${{ secrets.GITHUB_TOKEN }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
release:
needs: [release-container-prereq, release-container]
runs-on: ubuntu-latest
steps:
- name: print_env
run: env
- name: checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install helm
uses: azure/setup-helm@v4
- name: Setup Go
uses: actions/setup-go@v4
- name: Configure Git
if: env.IS_PRERELEASE != 'true'
run: |
git config user.name "$GITHUB_ACTOR"
git config user.email "$GITHUB_ACTOR@users.noreply.github.com"
- name: Update helm chart
if: env.IS_PRERELEASE != 'true'
run: |
git checkout main
sed -Ei \
-e 's/^(version\:) .*/\1 '${{ env.TAG_NAME }}'/g' \
-e 's/^(appVersion\:) .*/\1 "'${{ env.TAG_NAME }}'"/g' \
contrib/charts/dragonfly/Chart.yaml
go test ./contrib/charts/dragonfly/... -update
git commit \
-m 'chore(helm-chart): update to ${{ env.TAG_NAME }}' \
contrib/charts/dragonfly/Chart.yaml \
contrib/charts/dragonfly/ci
- name: Push Helm chart as OCI to Github
if: env.IS_PRERELEASE != 'true'
run: |
echo "${{ secrets.GITHUB_TOKEN }}" | \
helm registry login -u ${{ github.actor }} --password-stdin ghcr.io
helm package contrib/charts/dragonfly
helm push dragonfly-${{ env.TAG_NAME }}.tgz oci://ghcr.io/${{ github.repository }}/helm
- name: GitHub Push
uses: CasperWA/push-protected@v2
with:
token: ${{ secrets.DRAGONFLY_TOKEN }}
branch: main
- name: Discord notification
env:
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
uses: Ilshidur/action-discord@0c4b27844ba47cb1c7bee539c8eead5284ce9fa9
with:
args: 'DragonflyDB version [${{ env.TAG_NAME }}](https://github.com/dragonflydb/dragonfly/releases/tag/${{ env.TAG_NAME }}) has been released 🎉'
- name: Re-build Docs
if: env.IS_PRERELEASE != 'true'
run: |
curl -s -X POST '${{ secrets.VERCEL_DOCS_WEBHOOK }}'