1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
|
name: Initialize
on:
workflow_call:
inputs:
release:
type: string
ref_type:
type: string
required: false
default: ${{ github.ref_type }}
ref_name:
type: string
required: false
default: ${{ github.ref_name }}
base_ref:
type: string
required: false
default: ${{ github.base_ref }}
outputs:
docker_build_is_latest:
description: "Is used to set the tags latest and stable"
value: ${{ jobs.init.outputs.is_latest_tag }}
docker_build_is_version:
description: "Is used to set the version tags: major, major-minor, major-minor-patch"
value: ${{ jobs.init.outputs.is_version_tag }}
docker_test_tag:
description: "Is used to smoke test the latest push image"
value: ${{ jobs.init.outputs.docker_tag }}
release_new_version:
description: "new_version, is a release information"
value: ${{ jobs.init.outputs.new_version }}
release_latest_version:
description: "latest_version, is a release information"
value: ${{ jobs.init.outputs.latest_version }}
release_kind:
description: "release_kind, is a release information"
value: ${{ jobs.init.outputs.release_kind }}
release_ref:
description: "release_ref, is a release information"
value: ${{ jobs.init.outputs.release_ref }}
release_project:
description: "The name of the project to be released"
value: ${{ jobs.init.outputs.project }}
jobs:
init:
runs-on: ubuntu-latest
outputs:
is_latest_tag: ${{ steps.version.outputs.is_latest_tag }}
is_version_tag: ${{ steps.version.outputs.is_version_tag }}
docker_tag: ${{ steps.version.outputs.docker_tag }}
new_version: ${{ steps.version.outputs.new_version }}
latest_version: ${{ steps.version.outputs.latest_version }}
release_kind: ${{ steps.version.outputs.release_kind }}
release_ref: ${{ steps.version.outputs.release_ref }}
project: ${{ steps.version.outputs.project}}
steps:
- name: Checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: "set IS_VERSION_TAG"
run: |
echo "IS_VERSION_TAG=${{ inputs.ref_type == 'tag' && startsWith(inputs.ref_name, 'v') }}" >> $GITHUB_ENV
# set defaults
echo "IS_LATEST_TAG=false" >> $GITHUB_ENV
- name: "set IS_LATEST_TAG"
if: ( env.IS_VERSION_TAG == 'true' )
run: |
# find the latest version that is not ourself
export LATEST_VERSION=$(git tag -l | grep -v '${{ inputs.ref_name }}' | sort -r --version-sort | head -n 1)
# get major minor patch versions
IFS='.' read -r latest_major latest_minor latest_patch << EOF
$LATEST_VERSION
EOF
IFS='.' read -r tag_major tag_minor tag_patch << EOF
${{ inputs.ref_name }}
EOF
# remove leading v
latest_major=$(echo $latest_major | cut -c2-)
tag_major=$(echo $tag_major | cut -c2-)
echo "$tag_major >= $latest_major"
if [[ $tag_major -ge $latest_major && ($tag_minor -ne 0 || $tag_patch -ne 0) ]]; then
# set this tag to latest and stable
echo "IS_LATEST_TAG=true" >> $GITHUB_ENV
fi
echo "VERSION=$tag_major.$tag_minor.$tag_patch" >> $GITHUB_ENV
- name: "set DOCKER_TAG = edge"
if: ( env.IS_VERSION_TAG != 'true' )
run: |
echo "DOCKER_TAG=edge" >> $GITHUB_ENV
- name: "set DOCKER_TAG = ${{ env.VERSION }}"
if: ( env.IS_VERSION_TAG == 'true' )
run: |
echo "DOCKER_TAG=$VERSION" >> $GITHUB_ENV
- name: "set KIND = ${{ inputs.release }}"
run: echo "KIND=${{ inputs.release }}" >> $GITHUB_ENV
- name: "set RELEASE_REF = ${{ inputs.ref_name }}"
if: inputs.base_ref == ''
run: echo "RELEASE_REF=${{ inputs.ref_name }}" >> $GITHUB_ENV
- name: "set RELEASE_REF = ${{ inputs.base_ref }}"
if: inputs.base_ref != ''
run: echo "RELEASE_REF=${{ inputs.base_ref }}" >> $GITHUB_ENV
- name: RELEASE_REF != NULL
run: ([ -n "${{ env.RELEASE_REF }}" ])
- name: "LATEST_VERSION"
if: inputs.release != 'no_release'
run: |
git tag
if [[ "${{ env.RELEASE_REF }}" = "main" ]]; then
echo "LATEST_VERSION=$(git tag | grep "^v" | sed 's/^v//' | sort --version-sort | tail -n 1)" >> $GITHUB_ENV
else
echo "LATEST_VERSION=$(git tag | grep "^v${{ env.RELEASE_REF }}" | sed 's/^v//' | sort --version-sort | tail -n 1)" >> $GITHUB_ENV
fi
- name: "default LATEST_VERSION"
run: |
# default to 0.1.0 when there is no previous tag and on main branch
if ([[ -z "${{ env.LATEST_VERSION }}" ]] && [[ "${{ env.RELEASE_REF }}" = "main" ]]); then
echo "LATEST_VERSION=0.1.0" >> $GITHUB_ENV
fi
- name: LATEST_VERSION != NULL
if: env.KIND != 'no_release'
run: ([ -n "${{ env.LATEST_VERSION }}" ])
- name: RELEASE_KIND != NULL
run: ([ -n "${{ env.KIND }}" ])
- name: "NEW_VERSION"
if: env.KIND != 'no_release'
run: |
echo "NEW_VERSION=$(sh .github/enhance_version.sh ${{ env.LATEST_VERSION }} ${{ env.KIND }})" >> $GITHUB_ENV
# if version is set set docker-tag to latest
# if not and branch is main then set to edge
# if not and branch is not main then set to unknown
- name: NEW_VERSION != NULL
if: env.KIND != 'no_release'
run: ([ -n "${{ env.NEW_VERSION }}" ])
- name: set output
id: version
run: |
# release
echo "latest_version=${{ env.LATEST_VERSION }}">> "$GITHUB_OUTPUT"
echo "new_version=${{ env.NEW_VERSION }}">> "$GITHUB_OUTPUT"
echo "release_kind=${{ env.KIND }}">> "$GITHUB_OUTPUT"
echo "release_ref=${{ env.RELEASE_REF }}">> "$GITHUB_OUTPUT"
echo "project=$(echo "${{ github.repository }}" | sed 's/.*\///' )" >> "$GITHUB_OUTPUT"
# docker
echo "is_latest_tag=${{ env.IS_LATEST_TAG }}">> "$GITHUB_OUTPUT"
echo "is_version_tag=${{ env.IS_VERSION_TAG }}">> "$GITHUB_OUTPUT"
echo "docker_tag=${{ env.DOCKER_TAG }}">> "$GITHUB_OUTPUT"
|