name: "Set Version" description: "Generates a date-based build version, creates a git tag and uploads version artifact" inputs: version_suffix: description: "Suffix for version (e.g. dev, alpha, beta)" required: false default: "" suffix_separator: description: "Separator between version and suffix (either '.' or '-')" required: false default: "-" runs: using: "composite" steps: - name: Checkout Repository uses: https://github.com/actions/checkout@v3 with: token: ${{ env.CI_ACCESS_TOKEN }} - name: Fetch Tags shell: bash run: | git fetch --tags - name: Calculate Version id: calculate shell: bash run: | DATE_LEADING=$(date +'%Y.%m.%d') YEAR=$(date +'%Y') MONTH_NL=$(date +%-m) DAY_NL=$(date +%-d) TAG_COUNT=$(git tag -l "${DATE_LEADING}.*" | wc -l) BUILD_NUMBER="${TAG_COUNT}" # 0 on first build, 1 on second, etc. VERSION_SUFFIX="${{ inputs.version_suffix }}" SUFFIX_SEPARATOR="${{ inputs.suffix_separator }}" # Regular (keeps leading zeros in date) if [ -n "$VERSION_SUFFIX" ]; then BUILD_VERSION="${DATE_LEADING}.${BUILD_NUMBER}${SUFFIX_SEPARATOR}${VERSION_SUFFIX}" else BUILD_VERSION="${DATE_LEADING}.${BUILD_NUMBER}" fi # Dotnet variant: no leading zeros for month/day, omit build segment when 0 DOTNET_DATE="${YEAR}.${MONTH_NL}.${DAY_NL}" if [ "${BUILD_NUMBER}" -eq 0 ]; then if [ -n "$VERSION_SUFFIX" ]; then DOTNET_VERSION="${DOTNET_DATE}${SUFFIX_SEPARATOR}${VERSION_SUFFIX}" else DOTNET_VERSION="${DOTNET_DATE}" fi else if [ -n "$VERSION_SUFFIX" ]; then DOTNET_VERSION="${DOTNET_DATE}.${BUILD_NUMBER}${SUFFIX_SEPARATOR}${VERSION_SUFFIX}" else DOTNET_VERSION="${DOTNET_DATE}.${BUILD_NUMBER}" fi fi # NPM variant: year.month.(DDbb) where DD=day zero-padded to 2, bb=build zero-padded to 2 DAY_PAD=$(printf '%02d' "${DAY_NL}") BUILD_PAD=$(printf '%02d' "${BUILD_NUMBER}") NPM_DAY_BUILD="${DAY_PAD}${BUILD_PAD}" if [ -n "$VERSION_SUFFIX" ]; then NPM_VERSION="${YEAR}.${MONTH_NL}.${NPM_DAY_BUILD}${SUFFIX_SEPARATOR}${VERSION_SUFFIX}" else NPM_VERSION="${YEAR}.${MONTH_NL}.${NPM_DAY_BUILD}" fi echo "$BUILD_VERSION" > version.txt echo "$BUILD_VERSION" > version echo "$DOTNET_VERSION" > dotnet-version.txt echo "$DOTNET_VERSION" > dotnet-version echo "$NPM_VERSION" > npm-version.txt echo "$NPM_VERSION" > npm-version echo "VERSION=$BUILD_VERSION" >> $GITHUB_ENV echo "DOTNET_VERSION=$DOTNET_VERSION" >> $GITHUB_ENV echo "NPM_VERSION=$NPM_VERSION" >> $GITHUB_ENV - name: Create Git Tag shell: bash run: | git config user.name "ci" git config user.email "dev@sh-edraft.de" git tag "$VERSION" git push origin "$VERSION" - name: Upload Version Artifact uses: https://github.com/actions/upload-artifact@v3 with: name: version path: version.txt - name: Upload Dotnet Version Artifact uses: https://github.com/actions/upload-artifact@v3 with: name: dotnet-version path: dotnet-version.txt - name: Upload NPM Version Artifact uses: https://github.com/actions/upload-artifact@v3 with: name: npm-version path: npm-version.txt