11# SPDX-License-Identifier: Apache-2.0
22# Copyright 2024 Intel Corporation
33# Copyright 2024 Kyunghee University
4- name : Publish image and tag/release code
4+ # Copyright 2025 Canonical Ltd.
5+ name : Release Pipeline
56
67on :
78 push :
89 branches :
910 - master
11+ paths :
12+ - " VERSION"
1013
11- jobs :
12- version-check :
13- if : (github.repository_owner == 'onosproject')
14- runs-on : ubuntu-latest
15- outputs :
16- valid_version : ${{ steps.version-check-step.outputs.valid_version }}
17- dev_version : ${{ steps.dev-version-check-step.outputs.dev_version }}
18- target_version : ${{ steps.get-target-version-step.outputs.target_version }}
19- steps :
20- - uses : actions/checkout@v4
21- with :
22- fetch-depth : 0
23-
24- - name : check version
25- id : version-check-step
26- run : |
27- make check-version; if [[ $? == 0 ]]; then echo "valid_version=true" >> $GITHUB_OUTPUT; else echo "valid_version=false" >> $GITHUB_OUTPUT; fi
28- cat $GITHUB_OUTPUT
29-
30- - name : check dev version
31- id : dev-version-check-step
32- run : |
33- f_dev=$(./build/bin/version_check.sh is_dev)
34- if [[ $f_dev == "true" ]]; then echo "dev_version=true" >> $GITHUB_OUTPUT; else echo "dev_version=false" >> $GITHUB_OUTPUT; fi
35- cat $GITHUB_OUTPUT
36-
37- - name : get target version
38- id : get-target-version-step
39- run : |
40- echo "target_version=$(cat VERSION)" >> $GITHUB_OUTPUT
41- cat $GITHUB_OUTPUT
14+ permissions :
15+ contents : read
4216
43- tag_versions :
44- runs-on : ubuntu-latest
45- needs : version-check
46- if : (github.repository_owner == 'onosproject') && (needs.version-check.outputs.valid_version == 'true') && (needs.version-check.outputs.dev_version == 'false')
47- steps :
48- - uses : actions/checkout@v4
49- with :
50- fetch-depth : 0
51- - name : create release using REST API
52- run : |
53- curl -L \
54- -X POST \
55- -H "Accept: application/vnd.github+json" \
56- -H "Authorization: Bearer ${{ secrets.GH_ONOS_PAT }}" \
57- -H "X-GitHub-Api-Version: 2022-11-28" \
58- https://api.github.com/repos/${{ github.repository }}/releases \
59- -d '{
60- "tag_name": "v${{ needs.version-check.outputs.target_version }}",
61- "target_commitish": "${{ github.event.repository.default_branch }}",
62- "name": "v${{ needs.version-check.outputs.target_version }}",
63- "draft": false,
64- "prerelease": false,
65- "generate_release_notes": true
66- }'
67-
68- publish-images :
69- runs-on : ubuntu-latest
70- needs : version-check
71- if : (github.repository_owner == 'onosproject') && (needs.version-check.outputs.valid_version == 'true')
72- env :
73- REGISTRY : docker.io
74- DOCKER_REPOSITORY : onosproject/
75- steps :
76- - uses : actions/checkout@v4
77- with :
78- fetch-depth : 0
79- - uses : actions/setup-go@v5
80- with :
81- go-version-file : ' go.mod'
82- - uses : docker/login-action@v3.2.0
83- with :
84- registry : ${{ env.REGISTRY }}
85- username : ${{ secrets.DOCKER_USERNAME }}
86- password : ${{ secrets.DOCKER_PASSWORD }}
87- DOCKER_USERNAME : ${{ secrets.DOCKER_USERNAME }}
88- DOCKER_PASSWORD : ${{ secrets.DOCKER_PASSWORD }}
89- - name : Build and push Docker image with tag latest
90- env :
91- DOCKER_TAG : latest
92- run : |
93- ONOS_CONFIG_VERSION=${{ env.DOCKER_TAG }} make docker-build
94- ONOS_CONFIG_VERSION=${{ env.DOCKER_TAG }} make docker-push
95- - name : Build and push Docker image with tag
96- if : needs.version-check.outputs.dev_version == 'false'
97- env :
98- DOCKER_TAG : v${{ needs.version-check.outputs.target_version }}
99- run : |
100- ONOS_CONFIG_VERSION=${{ env.DOCKER_TAG }} make docker-build
101- ONOS_CONFIG_VERSION=${{ env.DOCKER_TAG }} make docker-push
102-
103- bump-up-version :
104- runs-on : ubuntu-latest
105- needs : version-check
106- if : (github.repository_owner == 'onosproject') && (needs.version-check.outputs.valid_version == 'true') && (needs.version-check.outputs.dev_version == 'false')
107- steps :
108- - uses : actions/checkout@v4
109- with :
110- fetch-depth : 0
111- - name : increment version
112- run : |
113- IFS='.' read -r major minor patch <<< ${{ needs.version-check.outputs.target_version }}
114- patch_update=$((patch+1))
115- NEW_VERSION="$major.$minor.$patch_update-dev"
116- echo $NEW_VERSION > VERSION
117- echo "Updated version: $NEW_VERSION"
118-
119- - name : Create Pull Request
120- uses : peter-evans/create-pull-request@v6
121- with :
122- token : ${{ secrets.GH_ONOS_PAT }}
123- commit-message : Update version
124- committer : github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
125- author : ${{ github.actor }} <${{ github.actor_id }}+${{ github.actor }}@users.noreply.github.com>
126- signoff : true
127- branch : version-update
128- delete-branch : true
129- title : Update version
130- body : |
131- Update VERSION file
132- add-paths : |
133- VERSION
17+ jobs :
18+ # Tag GitHub Release
19+ # The convention is to prefix the version with a 'v', e.g., v1.2.3
20+ tag-github :
21+ uses : onosproject/.github/.github/workflows/tag-github.yml@main
22+ with :
23+ add_v : true
24+ secrets : inherit
25+
26+ # Build and Release Docker Image
27+ # The convention is to use the same tag for the Docker image as the GitHub Release
28+ release-image :
29+ needs : tag-github
30+ if : needs.tag-github.outputs.changed == 'true'
31+ permissions :
32+ contents : read
33+ packages : write
34+ actions : read
35+ id-token : write
36+ attestations : write
37+ uses : onosproject/.github/.github/workflows/release-image.yml@main
38+ with :
39+ docker_tag : ${{ needs.tag-github.outputs.version }}
40+ secrets : inherit
41+
42+ # Bump Version
43+ update-version :
44+ needs : tag-github
45+ if : needs.tag-github.outputs.changed == 'true'
46+ uses : onosproject/.github/.github/workflows/bump-version.yml@main
47+ secrets : inherit
0 commit comments