Skip to content

ci: PLT-607: Remove dangling hyphen in release name #366

ci: PLT-607: Remove dangling hyphen in release name

ci: PLT-607: Remove dangling hyphen in release name #366

Workflow file for this run

name: "Build and Push"
on:
push:
branches:
- master
paths:
- ".github/workflows/build.yml"
- "label_studio_ml/examples"
env:
DOCKER_BUILD_CONFIG_BRANCH: "master"
DOCKER_BUILD_CONFIG_PATH: ".github/docker-build-config.yml"
DOCKER_EXAMPLES_DIRECTORY: "label_studio_ml/examples"
jobs:
build-image:
name: Build image
if: needs.calculate_matrix.outputs.matrix-include != '[]'
needs: calculate_matrix
runs-on: ${{ matrix.runs_on || 'ubuntu-latest' }}
timeout-minutes: 30
strategy:
fail-fast: false
matrix:
include: ${{ fromJson(needs.calculate_matrix.outputs.matrix-include) }}
env:
IMAGE_NAME: heartexlabs/label-studio-ml-backend
backend_dir_name: ${{ matrix.backend_dir_name }}
backend_tag_prefix: ${{ matrix.backend_tag_prefix }}
steps:
- uses: hmarr/[email protected]
- name: Check user's membership
uses: actions/github-script@v7
id: actor-membership
env:
ACTOR: ${{ github.actor }}
with:
github-token: ${{ secrets.GIT_PAT }}
script: |
const { repo, owner } = context.repo;
const actor = process.env.ACTOR;
const { data: membership } = await github.rest.orgs.getMembershipForUser({
org: owner,
username: actor,
});
core.setOutput("state", membership.state);
core.setOutput("active", membership.state == "active");
- uses: actions/checkout@v4
with:
ref: "${{ env.GITHUB_SHA }}"
fetch-depth: 0
- name: Calculate version
id: version
env:
BRANCH_NAME: "${{ github.event.pull_request.head.ref || github.ref_name }}"
PREFIX: "${{ env.backend_tag_prefix }}"
run: |
set -xueo pipefail
MAX_TAG_LENGTH=50
pretty_branch_name="$(echo -n "${BRANCH_NAME#refs/heads/}" | sed -E 's#[/_\.-]+#-#g' | tr '[:upper:]' '[:lower:]' | cut -c1-25 | sed -E 's#-$##g')"
echo "pretty_branch_name=${pretty_branch_name}" >> "${GITHUB_OUTPUT}"
timestamp="$(date +'%Y%m%d.%H%M%S')"
echo "timestamp=$timestamp" >> $GITHUB_OUTPUT
short_sha="$(git rev-parse --short HEAD)"
echo "short_sha=$short_sha" >> $GITHUB_OUTPUT
long_sha="$(git rev-parse HEAD)"
echo "sha=$long_sha" >> $GITHUB_OUTPUT
short_sha_length="$(echo $short_sha | awk '{print length}')"
timestamp_length="$(echo $timestamp | awk '{print length}')"
prefix_length="$(echo $PREFIX | awk '{print length}')"
short_branch="$(echo $pretty_branch_name | cut -c1-$((MAX_TAG_LENGTH - 2 - short_sha_length - timestamp_length - prefix_length)))"
echo "short_branch=$short_branch" >> $GITHUB_OUTPUT
image_version="${PREFIX}${timestamp}-${short_branch}-${short_sha}"
echo "image_version=$image_version" >> $GITHUB_OUTPUT
image_branch_version="${PREFIX}${short_branch}"
echo "image_branch_version=$image_branch_version" >> $GITHUB_OUTPUT
- name: Set up Docker Buildx
uses: docker/[email protected]
- name: Login to DockerHub
if: ${{ !github.event.pull_request.head.repo.fork }}
uses: docker/[email protected]
with:
username: ${{ vars.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Calculate Docker tags
id: calculate-docker-tags
uses: actions/github-script@v7
env:
IMAGE_NAME: "${{ env.IMAGE_NAME }}"
TAGS: "${{ steps.version.outputs.image_version }},${{ steps.version.outputs.image_branch_version }}"
with:
script: |
const raw_tags_input = process.env.TAGS;
const image_name = process.env.IMAGE_NAME;
const tags = raw_tags_input
.split(',')
.map(x => x.trim())
.map(x => `${image_name}:${x}`)
.join(',');
core.notice(`tags='${tags}'`)
core.setOutput("tags", tags);
- name: Push Docker image
uses: docker/[email protected]
id: docker_build_and_push
with:
context: "${{ env.DOCKER_EXAMPLES_DIRECTORY }}/${{ env.backend_dir_name }}"
push: ${{ steps.actor-membership.outputs.active }}
tags: "${{ steps.calculate-docker-tags.outputs.tags }}"
cache-from: type=gha
cache-to: type=gha,mode=max
calculate_matrix:
name: "Calculate build matrix"
runs-on: ubuntu-latest
outputs:
matrix-include: ${{ steps.matrix.outputs.matrix-include }}
steps:
- uses: hmarr/[email protected]
- run: npm install js-yaml
- name: Build matrix
id: matrix
uses: actions/github-script@v7
with:
script: |
const yaml = require('js-yaml');
const {owner, repo} = context.repo;
const default_branch = process.env.DOCKER_BUILD_CONFIG_BRANCH;
const docker_build_config_path = process.env.DOCKER_BUILD_CONFIG_PATH;
const docker_build_config_blob = await github.rest.repos.getContent({
owner: owner,
repo: repo,
ref: default_branch,
path: docker_build_config_path,
});
const docker_build_config_content = Buffer.from(docker_build_config_blob.data.content, docker_build_config_blob.data.encoding).toString("utf8");
const docker_build_config = yaml.load(docker_build_config_content);
core.setOutput("matrix-include", docker_build_config);