Display installed ubuntu packages (6) #41
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# This GitHub workflow will publish the package to Pypi and create a new stable branch when releasing the master branch. | |
# For more information see: | |
# https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions | |
# https://packaging.python.org/en/latest/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows/ | |
name: publish | |
on: | |
push: # When pushing a tag | |
tags: | |
- "*" | |
- "!*a0" # Exclude initial tag for a new version | |
jobs: | |
publish: | |
name: Build and publish to PyPI | |
if: startsWith(github.ref, 'refs/tags') | |
runs-on: ubuntu-latest | |
permissions: | |
id-token: write | |
steps: | |
#-------- Info gathering and checks | |
- name: Set pushed tag | |
id: set-tag | |
uses: actions/github-script@v7 | |
with: | |
result-encoding: string | |
script: | | |
const result = "${{ github.ref }}".match("refs/tags/(.*)$")[1] | |
console.log(result) | |
return result | |
- name: Check validity of pushed tag | |
run: | | |
if [[ ${{ steps.set-tag.outputs.result }} =~ ^[0-9]+\.[0-9]+\.[0-9]+((a|b|rc)[0-9]+)?$ ]]; then | |
echo "Pushed tag '${{ steps.set-tag.outputs.result }}' is valid"; | |
else | |
echo "Pushed tag '${{ steps.set-tag.outputs.result }}' is invalid (must be 'M.N.U' or a pre-release 'M.N.Ub/c/rcP'"; | |
false; | |
fi | |
- name: Determine whether releasing the master branch | |
id: set-is-master-branch | |
uses: actions/github-script@v7 | |
with: | |
result-encoding: string | |
script: | | |
const resp = await github.rest.git.getRef({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
ref: "heads/master", | |
}) | |
const result = (resp.data.object.sha == "${{ github.sha }}") | |
console.log(result) | |
return result | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Determine name of stable branch for pushed tag | |
id: set-stable-branch | |
uses: actions/github-script@v7 | |
with: | |
result-encoding: string | |
script: | | |
const result = "stable_"+"${{ steps.set-tag.outputs.result }}".match("([0-9]+\.[0-9]+)\.")[1] | |
console.log(result) | |
return result | |
- name: Determine whether releasing stable branch for pushed tag | |
id: set-is-stable-branch | |
uses: actions/github-script@v7 | |
with: | |
result-encoding: string | |
script: | | |
var resp | |
try { | |
resp = await github.rest.git.getRef({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
ref: "heads/${{ steps.set-stable-branch.outputs.result }}", | |
}) | |
} | |
catch(err) { | |
console.log("false (stable branch does not exist: "+err+")") | |
return false | |
} | |
const result = (resp.data.object.sha == "${{ github.sha }}") | |
console.log(result) | |
return result | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Determine name of beta branch for pushed tag | |
id: set-beta-branch | |
uses: actions/github-script@v7 | |
with: | |
result-encoding: string | |
script: | | |
const result = "beta_"+"${{ steps.set-tag.outputs.result }}".match("([0-9]+\.[0-9]+)\.")[1] | |
console.log(result) | |
return result | |
- name: Determine whether releasing beta branch for pushed tag | |
id: set-is-beta-branch | |
uses: actions/github-script@v7 | |
with: | |
result-encoding: string | |
script: | | |
var resp | |
try { | |
resp = await github.rest.git.getRef({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
ref: "heads/${{ steps.set-beta-branch.outputs.result }}", | |
}) | |
} | |
catch(err) { | |
console.log("false (beta branch does not exist: "+err+")") | |
return false | |
} | |
const result = (resp.data.object.sha == "${{ github.sha }}") | |
console.log(result) | |
return result | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Check released commit to be master or stable or beta branch for pushed tag | |
run: | | |
if [[ ${{ steps.set-is-master-branch.outputs.result }} == 'false' && ${{ steps.set-is-stable-branch.outputs.result }} == 'false' && ${{ steps.set-is-beta-branch.outputs.result }} == 'false' ]]; then | |
echo "Released commit is not 'master' or '${{ steps.set-stable-branch.outputs.result }}' or '${{ steps.set-beta-branch.outputs.result }}' branch"; | |
false; | |
fi | |
- name: Set update version | |
id: set-update-version | |
uses: actions/github-script@v7 | |
with: | |
result-encoding: string | |
script: | | |
const result = "${{ steps.set-tag.outputs.result }}".match("[0-9]+\.[0-9]+\.([0-9]+)")[1] | |
console.log(result) | |
return result | |
- name: Check update version to be 0 when releasing master branch | |
if: ${{ steps.set-is-master-branch.outputs.result == 'true' }} | |
run: | | |
if [[ ${{ steps.set-update-version.outputs.result }} != '0' ]]; then | |
echo "Update version '${{ steps.set-update-version.outputs.result }}' in tag '${{ steps.set-tag.outputs.result }}' is invalid (must be 0 when releasing master branch)"; | |
false; | |
fi | |
- name: Check update version to be non-0 when releasing stable branch for pushed tag | |
if: ${{ steps.set-is-stable-branch.outputs.result == 'true' }} | |
run: | | |
if [[ ${{ steps.set-update-version.outputs.result }} == '0' ]]; then | |
echo "Update version '${{ steps.set-update-version.outputs.result }}' in tag '${{ steps.set-tag.outputs.result }}' is invalid (must be non-0 when releasing stable branch for pushed tag)"; | |
false; | |
fi | |
#-------- Setup of work environment | |
- name: Checkout repo | |
uses: actions/checkout@v4 | |
with: | |
# fetch-depth 0 checks out all history for all branches and tags. | |
# This is needed to get the authors from git. | |
fetch-depth: 0 | |
- name: Debug - Display git authors | |
run: | | |
git shortlog --summary --email | |
- name: Downgrade Git version | |
run: | | |
echo "Info for git package:" | |
sudo apt show git | |
echo "Policy for git package:" | |
sudo apt policy git | |
echo "git version:" | |
git --version | |
which git | |
# echo "Adding git-core repository:" | |
# sudo add-apt-repository -y ppa:git-core/ppa | |
echo "Updating package list:" | |
sudo apt-get update | |
echo "Downgrading git package:" | |
sudo apt-get install -y git=1:2.34.1 | |
echo "Info for git package:" | |
sudo apt show git | |
echo "git version:" | |
git --version | |
which git | |
- name: Debug - Display git authors | |
run: | | |
git shortlog --summary --email | |
- name: Debug - Display git log | |
run: | | |
git log -1 --decorate | |
- name: Debug - Display git status | |
run: | | |
git status | |
- name: Debug - Display git describe | |
run: | | |
git describe --dirty --tags --long --match "*[0-9]*" | |
- name: Set up Python 3.10 | |
uses: actions/setup-python@v5 | |
with: | |
python-version: "3.10" | |
- name: Development setup | |
run: | | |
make develop | |
- name: Display Python packages | |
run: | | |
pip list | |
#-------- Publishing of package | |
- name: Debug - Display git status | |
run: | | |
git status | |
- name: Debug - Display git describe | |
run: | | |
git describe --dirty --tags --long --match "*[0-9]*" | |
- name: Debug - Display package version | |
run: | | |
python -m setuptools_scm | |
- name: Build the distribution | |
run: | | |
make build | |
- name: Display the distribution directory | |
run: | | |
ls -l dist | |
- name: Publish distribution to PyPI | |
if: startsWith(github.ref, 'refs/tags') | |
uses: pypa/gh-action-pypi-publish@release/v1 | |
with: | |
packages-dir: dist | |
# Pypi has a trusted publisher defined, so we do not need a password: | |
# https://pypi.org/manage/project/zhmc_prometheus_exporter/settings/publishing/ | |
#-------- Creation of Github release | |
- name: Determine whether release on Github exists for the pushed tag | |
id: set-release-exists | |
uses: octokit/[email protected] | |
with: | |
route: GET /repos/${{ github.repository }}/releases/tags/${{ steps.set-tag.outputs.result }} | |
continue-on-error: true | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Create release on Github for the pushed tag if it does not exist | |
if: ${{ steps.set-release-exists.outputs.status == 404 }} | |
uses: octokit/[email protected] | |
with: | |
route: POST /repos/${{ github.repository }}/releases | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
INPUT_TAG_NAME: ${{ steps.set-tag.outputs.result }} | |
INPUT_NAME: "Release ${{ steps.set-tag.outputs.result }}" | |
INPUT_BODY: "Change log https://zhmc-prometheus-exporter.readthedocs.io/en/${{ steps.set-tag.outputs.result }}/changes.html" | |
#-------- Creation of stable branch | |
- name: Create new stable branch when releasing master branch | |
if: steps.set-is-master-branch.outputs.result == 'true' | |
uses: actions/github-script@v7 | |
with: | |
script: | | |
github.rest.git.createRef({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
ref: "refs/heads/${{ steps.set-stable-branch.outputs.result }}", | |
sha: "${{ github.sha }}", | |
}) | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |