forked from CROSSINGTUD/Crypto-API-Rules
-
Notifications
You must be signed in to change notification settings - Fork 0
117 lines (114 loc) · 5.71 KB
/
jca_version.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
name: JavaCryptographicArchitecture version handling
on:
pull_request:
types:
- closed
branches:
- master
paths:
- JavaCryptographicArchitecture/**
jobs:
jca-version-update:
# This job does not run on self-opened PRs
if: ${{ github.event.pull_request.merged == true && github.event.pull_request.user.login != 'github-actions[bot]'}}
runs-on: ubuntu-latest
steps:
- name: Checkout source code
uses: actions/checkout@v3
with:
fetch-depth: 0
# Sets up Java version
- name: Set up Java
uses: actions/setup-java@v3
with:
distribution: 'adopt'
java-package: jdk
java-version: '11'
# Sets up Maven version
- name: Set up Maven
uses: stCarolas/[email protected]
with:
maven-version: 3.6.3
# Semantic versioning
- name: Semantic versioning
id: versioning
uses: paulhatch/[email protected]
with:
tag_prefix: ""
# A string which, if present in a git commit, indicates that a change represents a
# major (breaking) change
major_pattern: "(MAJOR-JCA)"
# Same as above except indicating a minor change
minor_pattern: "(MINOR-JCA)"
# A string to determine the format of the version output
version_format: "${major}.${minor}.${patch}"
# Run the version update only, if there are changes in the JavaCryptographicArchitecture directory
change_path: "JavaCryptographicArchitecture"
# Consider only tags/versions, which end with 'jca'
namespace: "jca"
# Check, whether there is an existing branch "jca_<version>" or an open PR "jca_<version>" -> "master"
# and store the results as environment variables
- name: Check if branch and PR exist
# The second command was copied from https://stackoverflow.com/questions/73812503/github-action-stop-the-action-if-pr-already-exists
run: |
echo VERSION_BRANCH_EXISTS=$(git ls-remote --heads origin refs/heads/jca_${{ steps.versioning.outputs.version }} | wc -l) >> $GITHUB_ENV
echo PR_EXISTS=$(gh pr list \
--repo "$GITHUB_REPOSITORY" \
--json baseRefName,headRefName \
--jq '
map(select(.baseRefName == "master" and .headRefName == "jca_${{ steps.versioning.outputs.version }}"))
| length
') >> $GITHUB_ENV
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# If the branch "jca_<version>" does not exist, create the branch and update the version in all files
- name: Create branch and update JavaCryptographicArchitecture version
if: ${{ env.VERSION_BRANCH_EXISTS == '0' }}
run: |
git config --global user.email "github-actions[bot]@users.noreply.github.com"
git config --global user.name "github-actions[bot]"
git checkout -b jca_${{ steps.versioning.outputs.version }}
mvn -f JavaCryptographicArchitecture build-helper:parse-version versions:set -DnewVersion=\${{ steps.versioning.outputs.version }} versions:commit
git ls-files | grep 'pom.xml$' | xargs git add
git commit --allow-empty -am "Update JavaCryptographicArchitecture version to ${{ steps.versioning.outputs.version }}"
git push origin jca_${{ steps.versioning.outputs.version }}
# If a PR "jca_<version>" -> "master" does not exist, create the PR
- name: Open pull request for version update
if: ${{ env.PR_EXISTS == '0' }}
run: |
gh pr create -B master -H jca_${{ steps.versioning.outputs.version }} -t "Update JavaCryptographicArchitecture version to ${{ steps.versioning.outputs.version }}" -b "This PR was created by the version-update workflow. Please make sure to delete the branch after merging, otherwise future workflows might fail."
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
jca-version-release:
# This job runs only on merged PRs, which were opened by the version-update job and have "JavaCryptographicArchitecture version" in the title
if: ${{ github.event.pull_request.merged == true && github.event.pull_request.user.login == 'github-actions[bot]' && contains(github.event.pull_request.title, 'JavaCryptographicArchitecture version') }}
runs-on: ubuntu-latest
steps:
- name: Checkout source code
uses: actions/checkout@v3
with:
fetch-depth: 0
# Semantic versioning
- name: Semantic versioning
id: versioning
uses: paulhatch/[email protected]
with:
tag_prefix: ""
# A string which, if present in a git commit, indicates that a change represents a
# major (breaking) change
major_pattern: "(MAJOR-JCA)"
# Same as above except indicating a minor change
minor_pattern: "(MINOR-JCA)"
# A string to determine the format of the version output
version_format: "${major}.${minor}.${patch}"
# Run the version update only, if there are changes in the JavaCryptographicArchitecture directory
change_path: "JavaCryptographicArchitecture"
# Consider only tags/versions, which end with 'jca'
namespace: "jca"
# Create a tag with the newest version to prepare a release
- name: Create tag for new JavaCryptographicArchitecture version
run: |
git config --global user.email "${{ github.actor }}@users.noreply.github.com"
git config --global user.name "${{ github.actor }}"
git tag -a ${{ steps.versioning.outputs.version }}-jca -m "JavaCryptographicArchitecture version ${{ steps.versioning.outputs.version }}"
git push origin ${{ steps.versioning.outputs.version }}-jca