From a23e8fc6cefbed986f21a084ad49a040510a5a50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ladislav=20Slez=C3=A1k?= Date: Fri, 27 Sep 2024 17:10:42 +0200 Subject: [PATCH] Submit the code from "release" branch to a separate OBS project --- .../obs-staging-autoinstallation.yml | 1 + .../obs-staging-integration-tests.yml | 1 + .github/workflows/obs-staging-live.yml | 1 + .github/workflows/obs-staging-products.yml | 1 + .github/workflows/obs-staging-rust.yml | 1 + .github/workflows/obs-staging-service.yml | 1 + .github/workflows/obs-staging-shared.yml | 46 ++++++++++++------- .github/workflows/obs-staging-web.yml | 1 + autoinstallation/package/_service | 6 ++- doc/obs_integration.md | 26 ++++++++++- products.d/_service | 6 ++- puppeteer/package/_service | 6 ++- rust/package/_service | 6 ++- web/package/_service | 6 ++- 14 files changed, 85 insertions(+), 24 deletions(-) diff --git a/.github/workflows/obs-staging-autoinstallation.yml b/.github/workflows/obs-staging-autoinstallation.yml index e43c9ba155..6888946a16 100644 --- a/.github/workflows/obs-staging-autoinstallation.yml +++ b/.github/workflows/obs-staging-autoinstallation.yml @@ -5,6 +5,7 @@ on: push: branches: - master + - release paths: # run only when an autoinstallation source is changed - autoinstallation/** diff --git a/.github/workflows/obs-staging-integration-tests.yml b/.github/workflows/obs-staging-integration-tests.yml index 85cdcf8806..63c26e2461 100644 --- a/.github/workflows/obs-staging-integration-tests.yml +++ b/.github/workflows/obs-staging-integration-tests.yml @@ -5,6 +5,7 @@ on: push: branches: - master + - release paths: # run only when a source file is changed - puppeteer/** diff --git a/.github/workflows/obs-staging-live.yml b/.github/workflows/obs-staging-live.yml index 02b530129b..43d9feb8a8 100644 --- a/.github/workflows/obs-staging-live.yml +++ b/.github/workflows/obs-staging-live.yml @@ -5,6 +5,7 @@ on: push: branches: - master + - release paths: # run only when a live ISO source is changed - live/** diff --git a/.github/workflows/obs-staging-products.yml b/.github/workflows/obs-staging-products.yml index 57cca558b6..ea54b77394 100644 --- a/.github/workflows/obs-staging-products.yml +++ b/.github/workflows/obs-staging-products.yml @@ -5,6 +5,7 @@ on: push: branches: - master + - release paths: # run only when a Rust source is changed - products.d/** diff --git a/.github/workflows/obs-staging-rust.yml b/.github/workflows/obs-staging-rust.yml index e14ca8c207..d1c7a80f61 100644 --- a/.github/workflows/obs-staging-rust.yml +++ b/.github/workflows/obs-staging-rust.yml @@ -5,6 +5,7 @@ on: push: branches: - master + - release paths: # run only when a Rust source is changed - rust/** diff --git a/.github/workflows/obs-staging-service.yml b/.github/workflows/obs-staging-service.yml index c9d7cc7c08..e17e560061 100644 --- a/.github/workflows/obs-staging-service.yml +++ b/.github/workflows/obs-staging-service.yml @@ -5,6 +5,7 @@ on: push: branches: - master + - release paths: # run only when a service source is changed - service/** diff --git a/.github/workflows/obs-staging-shared.yml b/.github/workflows/obs-staging-shared.yml index 00d5b3c8ee..2e4a968983 100644 --- a/.github/workflows/obs-staging-shared.yml +++ b/.github/workflows/obs-staging-shared.yml @@ -28,8 +28,9 @@ on: jobs: update_staging_package: - # do not run in forks which do not set the OBS_PROJECT variable - if: vars.OBS_PROJECT != '' + # do not run in forks which do not set the OBS_PROJECT variable, + # for the "release" branch or a git tag use the OBS_PROJECT_RELEASE variable + if: vars.OBS_PROJECT != '' || ((github.ref_name == 'release' || github.ref_type == 'tag') && vars.OBS_PROJECT_RELEASE != '') runs-on: ubuntu-latest @@ -37,6 +38,17 @@ jobs: image: registry.opensuse.org/opensuse/tumbleweed:latest steps: + - name: Select OBS project + id: obs_project + run: |- + if [ "${{ github.ref_name }}" = "release" -o "${{ github.ref_type }}" = "tag" ]; then + echo "OBS_PROJECT=${{ vars.OBS_PROJECT_RELEASE }}" >> "$GITHUB_OUTPUT" + echo "OBS project: ${{ vars.OBS_PROJECT_RELEASE }}" + else + echo "OBS_PROJECT=${{ vars.OBS_PROJECT }}" >> "$GITHUB_OUTPUT" + echo "OBS project: ${{ vars.OBS_PROJECT }}" + fi + - name: Configure and refresh repositories # disable unused repositories to have a faster refresh run: zypper modifyrepo -d repo-non-oss repo-openh264 repo-update && zypper ref @@ -64,19 +76,19 @@ jobs: OBS_USER: ${{ secrets.OBS_USER }} OBS_PASSWORD: ${{ secrets.OBS_PASSWORD }} - - name: Checkout ${{ vars.OBS_PROJECT }} ${{ inputs.package_name }} - run: osc co ${{ vars.OBS_PROJECT }} ${{ inputs.package_name }} + - name: Checkout ${{ steps.obs_project.outputs.OBS_PROJECT }} ${{ inputs.package_name }} + run: osc co ${{ steps.obs_project.outputs.OBS_PROJECT }} ${{ inputs.package_name }} - name: Configure git run: git config --global --add safe.directory "$GITHUB_WORKSPACE" - name: Update service revision - # only when a tag has been pushed - if: ${{ github.ref_type == 'tag' }} + # only when a tag has been pushed, or "release" branch updated + if: github.ref_type == 'tag' || github.ref_name == 'release' run: |- - echo "Updating revision to ${{ github.ref_name }}" + echo "Updating revision to \"${{ github.ref_name }}\"" sed -i -e 's#.*#${{ github.ref_name }}#' _service - working-directory: ./${{ vars.OBS_PROJECT }}/${{ inputs.package_name }} + working-directory: ./${{ steps.obs_project.outputs.OBS_PROJECT }}/${{ inputs.package_name }} - name: Copy optional service file # patch the URL in the file so it works also from forks, forks also by @@ -84,31 +96,31 @@ jobs: # no tag is present if: inputs.service_file != '' run: | - sed -e 's#.*#https://github.com/${{ github.repository }}.git#' ${{ inputs.service_file }} > ./${{ vars.OBS_PROJECT }}/${{ inputs.package_name }}/_service - if [ -z "$(git tag -l)" ]; then sed -i -e 's#.*##' ./${{ vars.OBS_PROJECT }}/${{ inputs.package_name }}/_service; fi + sed -e 's#.*#https://github.com/${{ github.repository }}.git#' ${{ inputs.service_file }} > ./${{ steps.obs_project.outputs.OBS_PROJECT }}/${{ inputs.package_name }}/_service + if [ -z "$(git tag -l)" ]; then sed -i -e 's#.*##' ./${{ steps.obs_project.outputs.OBS_PROJECT }}/${{ inputs.package_name }}/_service; fi - name: Run services run: osc service manualrun - working-directory: ./${{ vars.OBS_PROJECT }}/${{ inputs.package_name }} + working-directory: ./${{ steps.obs_project.outputs.OBS_PROJECT }}/${{ inputs.package_name }} - name: Cleanup # sometimes the "osc service" run does not cleanup properly all # downloaded NPM package tarballs and they are accidentally added to the # OBS package, so delete any TGZ files present run: rm -vf *.tgz - working-directory: ./${{ vars.OBS_PROJECT }}/${{ inputs.package_name }} + working-directory: ./${{ steps.obs_project.outputs.OBS_PROJECT }}/${{ inputs.package_name }} - name: Check status run: osc addremove && osc diff && osc status - working-directory: ./${{ vars.OBS_PROJECT }}/${{ inputs.package_name }} + working-directory: ./${{ steps.obs_project.outputs.OBS_PROJECT }}/${{ inputs.package_name }} - - name: Commit ${{ inputs.package_name }} to ${{ vars.OBS_PROJECT }} + - name: Commit ${{ inputs.package_name }} to ${{ steps.obs_project.outputs.OBS_PROJECT }} run: |- osc commit -m "Updated to $(sed -e '/^version:/!d' -e 's/version: *\(.*\)/\1/' agama.obsinfo) ($(sed -e '/^commit:/!d' -e 's/commit: *\(.*\)/\1/' agama.obsinfo))" - working-directory: ./${{ vars.OBS_PROJECT }}/${{ inputs.package_name }} + working-directory: ./${{ steps.obs_project.outputs.OBS_PROJECT }}/${{ inputs.package_name }} - name: Submit the package # only when a tag has been pushed - if: ${{ github.ref_type == 'tag' }} + if: github.ref_type == 'tag' run: osc sr --yes -m "Releasing version ${{ github.ref_name }}" - working-directory: ./${{ vars.OBS_PROJECT }}/${{ inputs.package_name }} + working-directory: ./${{ steps.obs_project.outputs.OBS_PROJECT }}/${{ inputs.package_name }} diff --git a/.github/workflows/obs-staging-web.yml b/.github/workflows/obs-staging-web.yml index bef124e2fb..6480cfda4a 100644 --- a/.github/workflows/obs-staging-web.yml +++ b/.github/workflows/obs-staging-web.yml @@ -5,6 +5,7 @@ on: push: branches: - master + - release paths: # run only when a web frontend source is changed - web/** diff --git a/autoinstallation/package/_service b/autoinstallation/package/_service index 1a4f3d586c..264b36d000 100644 --- a/autoinstallation/package/_service +++ b/autoinstallation/package/_service @@ -1,9 +1,13 @@ - https://github.com/openSUSE/agama.git + + https://github.com/agama-project/agama.git @PARENT_TAG@+@TAG_OFFSET@ v(.*) git + master autoinstallation enable diff --git a/doc/obs_integration.md b/doc/obs_integration.md index 9b6c347b24..19c91a8ea7 100644 --- a/doc/obs_integration.md +++ b/doc/obs_integration.md @@ -10,7 +10,9 @@ - [GitHub Fork](#github-fork) - [Configuring the GitHub Actions](#configuring-the-github-actions) - [Triggering the Rebuild](#triggering-the-rebuild) - - [Package Versioning](#package-versioning) + - [Devel Package Versioning](#devel-package-versioning) + - [Release Project](#release-project) + - [Release Package Versioning](#release-package-versioning) --- @@ -183,7 +185,7 @@ Alternatively you can trigger the package submission manually. Go to the bar and in the main area click the "Run workflow" selector. Then in the popup keep the default `master` branch and click the "Run workflow" button. -## Package Versioning +### Devel Package Versioning The packages in the Devel project use a version built from the last released version with a number of commits in the `master` branch since that release. @@ -191,3 +193,23 @@ version with a number of commits in the `master` branch since that release. The version is automatically constructed by the OBS service, for the `rubygem-agama` package the version is built using the `git describe --tags` command. + +## Release Project + +For relasing a public version of Agama we use the +[systemsmanagement:Agama:Release]( +https://build.opensuse.org/project/show/systemsmanagement:Agama:Devel) project +and respective [release](https://github.com/agama-project/agama/tree/release) +branch in Git. The reason for a separate project is that we might need to +release a hot fix but the `master` branch might already contain a new feature +for the next version. + +The integration works the same way as for the Devel project above, the only +difference is that it uses the `OBS_PROJECT_RELEASE` GitHub Action variable +to define the target OBS project to allow submitting to a different project. + +### Release Package Versioning + +The packages in the Release project use a version based on the version tag +matching `v[0-9]+`. Use `rake tag` command for creating a tag. See more details +in the [packaging documentation](../PACKAGING.md#bumping-the-version). diff --git a/products.d/_service b/products.d/_service index cd3b780e4f..881ad3ee34 100644 --- a/products.d/_service +++ b/products.d/_service @@ -1,9 +1,13 @@ - https://github.com/openSUSE/agama.git + + https://github.com/agama-project/agama.git @PARENT_TAG@+@TAG_OFFSET@ v(.*) git + master products.d enable diff --git a/puppeteer/package/_service b/puppeteer/package/_service index 440c0e63d5..f11ca977ba 100644 --- a/puppeteer/package/_service +++ b/puppeteer/package/_service @@ -2,8 +2,12 @@ @PARENT_TAG@+@TAG_OFFSET@ v(.*) - https://github.com/openSUSE/agama.git + + https://github.com/agama-project/agama.git git + master puppeteer enable diff --git a/rust/package/_service b/rust/package/_service index 597f32264c..0c4798cd4c 100644 --- a/rust/package/_service +++ b/rust/package/_service @@ -1,9 +1,13 @@ - https://github.com/openSUSE/agama.git + + https://github.com/agama-project/agama.git @PARENT_TAG@+@TAG_OFFSET@ v(.*) git + master rust enable diff --git a/web/package/_service b/web/package/_service index a1ca8be132..0e4837cff3 100644 --- a/web/package/_service +++ b/web/package/_service @@ -2,8 +2,12 @@ @PARENT_TAG@+@TAG_OFFSET@ v(.*) - https://github.com/openSUSE/agama.git + + https://github.com/agama-project/agama.git git + master web enable