Skip to content

Publish Helm Charts to ghcr.io #1

Publish Helm Charts to ghcr.io

Publish Helm Charts to ghcr.io #1

Workflow file for this run

name: Publish Helm Charts to ghcr.io
on:
push:
tags:
- \d+\.\d+\.\d+
workflow_dispatch: # Также можно вручную запускать workflow.
inputs:
tag:
description: "Tag to process"
required: true
default: "1.0.0"
jobs:
deploy:
runs-on: ubuntu-latest
steps:
# ШАГ 1. Узнаем, откуда пришел workflow (пуш тега или ручной запуск)
- name: Determine if workflow is running from tag or input
id: determine_tag
run: |
# Определяем, был ли использован workflow_dispatch
if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then
echo "Using input tag: ${{ inputs.tag }}"
echo "TAG_VERSION=${{ inputs.tag }}" >> $GITHUB_ENV
else
# Используем тег из события пуша
echo "Using pushed tag: ${GITHUB_REF#refs/tags/}"
echo "TAG_VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV
fi
# ШАГ 2. Checkout репозитория на указанный тег
- name: Checkout repository at specified tag
uses: actions/checkout@v4
with:
ref: ${{ env.TAG_VERSION }}
# ШАГ 3. Подтверждаем, что переключение на тег прошло успешно
- name: Confirm current tag
run: |
echo "Checked out to tag: ${{ env.TAG_VERSION }}"
git rev-parse HEAD
git describe --tags
# ШАГ 4: Установка Helm
- name: Setup Helm
uses: azure/setup-helm@v3
with:
version: latest # Используем последнюю стабильную версию Helm
# ШАГ 5. Обрабатываем все чарты в директории ./charts
- name: Find and package Helm charts
run: |
echo "Using version: ${{ env.TAG_VERSION }}"
# Создаем директорию для упакованных чартов
mkdir -p ./packaged
# Ищем все Chart.yaml внутри папки ./charts
for chart_path in $(find ./charts -name 'Chart.yaml'); do
chart_dir=$(dirname $chart_path) # Директория чарта
echo "Processing chart in directory: $chart_dir"
# Обновляем версию в Chart.yaml на основе тега
sed -i -E "s/^version:.*/version: ${TAG_VERSION}/" $chart_path
echo "Updated Chart.yaml:"
cat $chart_path # Выводим файл для проверки
# Упаковываем чарт
helm package $chart_dir --destination ./packaged
done
# ШАГ 6: Входим в GitHub Container Registry
- name: Log in to GitHub Container Registry
run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin
# ШАГ 7. Публикуем чарты
- name: Push packaged Helm charts to ghcr.io
run: |
for chart in ./packaged/*.tgz; do
echo "Pushing chart: $chart -> ghcr.io/${{ github.repository_owner }}/charts"
helm push $chart oci://ghcr.io/${{ github.repository_owner }}/charts
done