name: Build and Publish Docker Image on: push: branches: - main - test jobs: build: runs-on: ubuntu-latest steps: - name: Check out code uses: actions/checkout@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 - name: Log in to Docker Hub uses: docker/login-action@v2 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - name: Get the current timestamp id: timestamp run: echo "TIMESTAMP=$(date +%Y%m%d%H%M%S)" >> $GITHUB_ENV - name: Get commit version id: commit-version run: | COMMIT_MSG=$(git log -1 --pretty=%B) echo "Commit message: $COMMIT_MSG" # Debugging output # Updated regex to handle both vX.Y, vX.Y.Z, and vX.Y-pre-release formats if [[ "$COMMIT_MSG" =~ ^v[0-9]+\.[0-9]+(\.[0-9]+)?(-[a-zA-Z0-9._-]+)?$ ]]; then echo "Version match: $COMMIT_MSG" echo "VERSION=${COMMIT_MSG}" >> $GITHUB_ENV else echo "No version match, defaulting to 'dev'" echo "VERSION=dev" >> $GITHUB_ENV fi - name: Build Docker image run: | docker build -t ti1:${{ env.VERSION }} . - name: Push Docker image run: | # Always push to 'dev' tag docker tag ti1:${{ env.VERSION }} ${{ secrets.DOCKER_USERNAME }}/ti1:dev docker push ${{ secrets.DOCKER_USERNAME }}/ti1:dev # If the version is valid, also push that specific version tag if [[ "${{ env.VERSION }}" != "dev" ]]; then docker tag ti1:${{ env.VERSION }} ${{ secrets.DOCKER_USERNAME }}/ti1:${{ env.VERSION }} docker push ${{ secrets.DOCKER_USERNAME }}/ti1:${{ env.VERSION }} fi