Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
edcc31e
chore: add support pymsteams-workflow for msteams-notifier
vadim-kharin-codefresh Jun 19, 2026
4ad911b
Vendored pymsteams-workflow to avoid module name collision and update…
vitalii-codefresh Jun 23, 2026
899b3fa
Merge branch 'master' into CF-141
vitalii-codefresh Jun 23, 2026
47c6fce
Added support for Power Automate workflows; updated documentation and…
vitalii-codefresh Jun 23, 2026
4762d0c
Merge remote-tracking branch 'origin/CF-141' into CF-141
vitalii-codefresh Jun 23, 2026
2ed7f72
Validate and sanitize `MSTEAMS_WORKFLOW_URL` to handle common misconf…
vitalii-codefresh Jun 23, 2026
f8ef3bb
Bump version to 1.1.0 and add support for Power Automate workflows; u…
vitalii-codefresh Jul 1, 2026
a12f96d
Make `MSTEAMS_WEBHOOK_URL` optional; add fields for Power Automate wo…
vitalii-codefresh Jul 1, 2026
7af4611
Validate `MSTEAMS_WEBHOOK_URL` to ensure it is set before creating Te…
vitalii-codefresh Jul 2, 2026
e36bc80
Set default value for `MSTEAMS_WEBHOOK_URL` to an empty string and va…
vitalii-codefresh Jul 2, 2026
5abb6d8
Handle unset `MSTEAMS_WEBHOOK_URL` more gracefully by printing an err…
vitalii-codefresh Jul 2, 2026
48c151f
Make `MSTEAMS_WEBHOOK_URL` optional, set default to empty string, and…
vitalii-codefresh Jul 2, 2026
b16ac68
Merge remote-tracking branch 'origin/master'
vitalii-codefresh Nov 9, 2026
8920a64
fix(jira-issue-manager): rebase on Python 3.14 trixie and pin depende…
vitalii-codefresh Nov 11, 2026
b9c0a13
CF-2632: fix(sonar-quality-gates-checker): rebase on Python 3.14 alpi…
vitalii-codefresh Nov 11, 2026
b326fca
Merge branch 'master' into CF-2632-update-base-images
vitalii-codefresh Nov 11, 2026
1f9010b
bump patch version of step, removed unrelevant comment
vitalii-codefresh Nov 11, 2026
f860e1c
Merge remote-tracking branch 'origin/CF-2632-update-base-images' into…
vitalii-codefresh Nov 11, 2026
ce6b9f9
bump patch version image
vitalii-codefresh Nov 11, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions incubating/jira-issue-manager/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
FROM python:3.7.9-slim-buster
FROM python:3.14-slim-trixie

ENV LANG C.UTF-8
ENV LANG=C.UTF-8

RUN pip install --no-cache-dir jira
RUN pip install --no-cache-dir jira==3.10.5 certifi==2026.10.23

COPY script/. /

ENTRYPOINT ["python", "/jira_issue_manager.py"]
CMD [""]
CMD [""]
4 changes: 2 additions & 2 deletions incubating/jira-issue-manager/step.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ kind: step-type
version: '1.0'
metadata:
name: jira-issue-manager
version: 1.0.13
version: 1.0.14
title: Jira Issue Manager
isPublic: true
description: Create, Update, & Validate Jira Issues
Expand Down Expand Up @@ -246,7 +246,7 @@ spec:
stepsTemplate: |-
main:
name: jira-issue-manager
image: quay.io/codefreshplugins/jira-issue-manager:1.0.13
image: quay.io/codefreshplugins/jira-issue-manager:1.0.14
environment:
[[ range $key, $val := .Arguments ]]
- '[[ $key ]]=[[ $val ]]'
Expand Down
5 changes: 0 additions & 5 deletions incubating/sonar-quality-gates-checker-cf/Dockerfile

This file was deleted.

64 changes: 0 additions & 64 deletions incubating/sonar-quality-gates-checker-cf/lib/sonarqube-api.py

This file was deleted.

100 changes: 0 additions & 100 deletions incubating/sonar-quality-gates-checker-cf/step.yaml

This file was deleted.

4 changes: 2 additions & 2 deletions incubating/sonar-quality-gates-checker/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
FROM python:3.9.1-alpine3.13
FROM python:3.14-alpine3.24

RUN pip install --no-cache-dir python-sonarqube-api
RUN pip install --no-cache-dir requests==2.34.2 certifi==2026.10.23

COPY lib/sonarqube-api.py /sonarqube-api.py
44 changes: 22 additions & 22 deletions incubating/sonar-quality-gates-checker/codefresh.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
version: '1.0'
steps:
Clone:
title: Cloning jira issue manager repository
title: Cloning steps repository
type: "git-clone"
arguments:
repo: '${{CF_REPO_OWNER}}/${{CF_REPO_NAME}}'
Expand All @@ -12,30 +12,30 @@ steps:
title: Getting Plugin Version
image: codefresh/cli
commands:
- cf_export PLUGIN_VERSION=$(yq -r .metadata.version ./steps/incubating/sonarqube/step.yaml)
- cf_export PLUGIN_VERSION=$(yq -r .metadata.version ./steps/incubating/sonar-quality-gates-checker/step.yaml)

BuildImage:
title: Building Docker Image
type: build
working_directory: "./steps/incubating/sonarqube"
working_directory: "./steps/incubating/sonar-quality-gates-checker"
dockerfile: "Dockerfile"
image_name: codefreshplugins/sonarqube
image_name: codefreshplugins/sonar-quality-gates-checker

PushingToRegistries:
title: Pushing to Registry
type: push
candidate: ${{BuildImage}}
tags:
- "latest"
- "${{PLUGIN_VERSION}}"
when:
branch:
only:
- master
scale:
PushingToDockerHubRegistry:
title: Pushing To DockerHub Registry
registry: dockerhub
PushingToQuayRegistry:
title: Pushing To Quay Registry
registry: cfpluginmgr-quay
PushingToRegistries:
title: Pushing to Registry
type: push
candidate: ${{BuildImage}}
tags:
- "latest"
- "${{PLUGIN_VERSION}}"
when:
branch:
only:
- master
scale:
PushingToDockerHubRegistry:
title: Pushing To DockerHub Registry
registry: dockerhub
PushingToQuayRegistry:
title: Pushing To Quay Registry
registry: cfpluginmgr-quay
46 changes: 29 additions & 17 deletions incubating/sonar-quality-gates-checker/lib/sonarqube-api.py
Original file line number Diff line number Diff line change
@@ -1,31 +1,30 @@
import os
import sys
from sonarqube import SonarCloudClient
from sonarqube import SonarQubeClient
import json
import requests


def exportResults(status):
def exportResults(status):
print("\nExporting Results")

qualitygates_status_json = json.dumps(status)
qualitygates_status_json = json.dumps(status)
qualitygates_status= status['projectStatus']['status']

env_file_path = "/meta/env_vars_to_export"

if not os.path.exists(env_file_path):
print(f"Quality Gates status is \n'{qualitygates_status}'")
print(f"Quality Gates status JSON is \n'{qualitygates_status_json}'")
print(f"Quality Gates status is \n'{qualitygates_status}'")
print(f"Quality Gates status JSON is \n'{qualitygates_status_json}'")
else:
env_file = open(env_file_path, "a")
qualitygates_status_json_file_path = f"/codefresh/volume/sonarqualitygates-{os.getenv('CF_SHORT_REVISION')}.json"
qualitygates_status_json_file_path = f"/codefresh/volume/sonarqualitygates-{os.getenv('CF_SHORT_REVISION')}.json"
env_file.write("SONAR_QUALITYGATES_STATUS=" + qualitygates_status + "\n")
env_file.write("SONAR_QUALITYGATES_STATUS_JSON_PATH=" + qualitygates_status_json_file_path + "\n")
env_file.close()

qualitygates_status_json_file = open(qualitygates_status_json_file_path, "w")
json.dump(status, qualitygates_status_json_file, indent = 4)
qualitygates_status_json_file.close()
qualitygates_status_json_file = open(qualitygates_status_json_file_path, "w")
json.dump(status, qualitygates_status_json_file, indent = 4)
qualitygates_status_json_file.close()

def actBasedOnStatus(status):
qualitygates_status = status['projectStatus']['status']
Expand All @@ -51,18 +50,31 @@ def main():
sonar_url = os.getenv('SONAR_HOST_URL', 'https://sonarcloud.io')

if sonarcloud_token:
sonar = SonarCloudClient(sonarcloud_url=sonar_url, token=sonarcloud_token)
auth = (sonarcloud_token, "")
elif sonarqube_username and sonarqube_password:
auth = (sonarqube_username, sonarqube_password)
else:
sonar = SonarQubeClient(sonarqube_url=sonar_url, username=sonarqube_username, password=sonarqube_password)
auth = None

# Code: https://github.com/shijl0925/python-sonarqube-api/blob/376cf1d6ef231ee084694c77dadf551733395d4f/sonarqube/community/qualitygates.py#L182
# Docs: https://python-sonarqube-api.readthedocs.io/en/1.2.1/examples/qualitygates.html#
if pr is not None:
if pr is not None:
print(f"PR Quality Gate for PR #{pr}")
branch = None # since the QG check accepts only branch or PR
qualitygates_status = sonar.qualitygates.get_project_qualitygates_status(projectKey=sonar_project, branch=branch, pullRequest=pr)

# Docs: https://next.sonarqube.com/sonarqube/web_api/api/qualitygates/project_status
# requests drops parameters whose value is None, so only one of branch/pullRequest is sent.
url = sonar_url.rstrip("/") + "/api/qualitygates/project_status"
params = {"projectKey": sonar_project, "branch": branch, "pullRequest": pr}
try:
response = requests.get(url, params=params, auth=auth, timeout=60)
except requests.exceptions.RequestException as exc:
print(f"Failed to call {url}: {exc}")
sys.exit(1)
if not response.ok:
print(f"Failed to get Quality Gates status: HTTP {response.status_code} from {url}\n{response.text}")
sys.exit(1)
qualitygates_status = response.json()
exportResults(qualitygates_status)
actBasedOnStatus(qualitygates_status)

if __name__ == "__main__":
main()
main()
6 changes: 3 additions & 3 deletions incubating/sonar-quality-gates-checker/step.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ kind: step-type
version: '1.0'
metadata:
name: sonar-quality-gates-checker
version: 0.1.3
version: 0.1.4
isPublic: true
description: Check Quality Gates from Sonarqube or Sonarcloud
sources:
Expand Down Expand Up @@ -84,11 +84,11 @@ spec:
"description": "Path to the JSON file response of the Quality Gates status of a Project"
}
}
}
}
stepsTemplate: |-
sonar:
name: sonar
image: quay.io/codefreshplugins/sonar-quality-gates-checker:0.1.2
image: quay.io/codefreshplugins/sonar-quality-gates-checker:0.1.4
environment:
[[ range $key, $val := .Arguments ]]
- '[[ $key ]]=[[ $val ]]'
Expand Down
Loading