diff --git a/.github/workflows/container.yml b/.github/workflows/container.yml index b122911a5..86bb54f07 100644 --- a/.github/workflows/container.yml +++ b/.github/workflows/container.yml @@ -2,12 +2,13 @@ name: Container Image Builds on: push: - branches: [main, stable, oldstable] + branches: + - main tags: ["v*"] pull_request: - branches: [main, stable, oldstable] + branches: + - main workflow_dispatch: - repository_dispatch: jobs: images: @@ -16,6 +17,8 @@ jobs: steps: - name: Checkout repository uses: actions/checkout@v3 + - uses: greenbone/actions/is-latest-tag@v2 + id: latest - name: Setup container meta information id: meta uses: docker/metadata-action@v4 @@ -26,20 +29,20 @@ jobs: org.opencontainers.image.base.name=debian/stable-slim flavor: latest=false # no latest container tag for git tags tags: | - # use container tag for git tags - type=match,pattern=v(.*),group=1 - # use latest for latest tag from stable branch - type=raw,value=latest,enable=${{ github.ref_type == 'tag' && startsWith(github.ref_name, 'v22.4') }} - # use stable for latest 22.4 tag - type=raw,value=stable,enable=${{ github.ref_type == 'tag' && startsWith(github.ref_name, 'v22.4') }} - # use oldstable for latest 21.4 tag - type=raw,value=oldstable,enable=${{ github.ref_type == 'tag' && startsWith(github.ref_name, 'v21.4') }} + # use version, major.minor and major for tags + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=semver,pattern={{major}} + # use edge for default branch type=edge - # use branch-sha otherwise for pushes to branches other then main (will not be uploaded) - type=raw,value={{branch}}-{{sha}},enable=${{ github.ref_type == 'branch' && github.event_name == 'push' && github.ref_name != 'main' }} - # use pr-$PR_ID for pull requests (will not be uploaded) + + # set label for non-published pull request builds type=ref,event=pr + + # when a new git tag is created set stable and a latest tags + type=raw,value=latest,enable=${{ steps.latest.outputs.is-latest-tag == 'true' }} + type=raw,value=stable,enable=${{ steps.latest.outputs.is-latest-tag == 'true' }} - name: Login to Docker Registry if: github.event_name != 'pull_request' uses: docker/login-action@v2 diff --git a/.github/workflows/release-pontos.yml b/.github/workflows/release-pontos.yml index 85da7c555..00a2ca726 100644 --- a/.github/workflows/release-pontos.yml +++ b/.github/workflows/release-pontos.yml @@ -1,34 +1,54 @@ -name: Release gvmd with pontos +name: Release gvmd on: pull_request: types: [closed] workflow_dispatch: + inputs: + release-type: + type: choice + description: What kind of release do you want to do (pontos --release-type argument)? + options: + - patch + - minor + - major + release-version: + type: string + description: Set an explicit version, that will overwrite release-type. Fails if version is not compliant. jobs: build-and-release: - name: Create a new release with pontos - # If the event is a workflow_dispatch or the label 'make release' is set and PR is closed because of a merge - if: (github.event_name == 'workflow_dispatch') || (contains( github.event.pull_request.labels.*.name, 'make release') && github.event.pull_request.merged == true) - runs-on: "ubuntu-latest" + name: Create a new release + # If the event is a workflow_dispatch or on of the labels 'pre release', + # 'patch release', 'minor release' or 'major release' is set and PR is + # closed because of a merge + # NOTE: priority of set labes will be alpha > release-candidate > patch > minor > major, + # so if 'major' and 'patch' labes are set, it will create a patch release. + if: | + ( github.event_name == 'workflow_dispatch') || ( + ( contains(github.event.pull_request.labels.*.name, 'alpha release') || + contains(github.event.pull_request.labels.*.name, 'rc release') || + contains(github.event.pull_request.labels.*.name, 'patch release') || + contains(github.event.pull_request.labels.*.name, 'minor release') || + contains(github.event.pull_request.labels.*.name, 'major release')) && + github.event.pull_request.merged == true ) + runs-on: 'ubuntu-latest' steps: - - name: Setting the Reference - run: | - if [[ "${{ github.event_name }}" = "workflow_dispatch" ]]; then - echo "RELEASE_REF=${{ github.ref_name }}" >> $GITHUB_ENV - else - echo "RELEASE_REF=${{ github.base_ref }}" >> $GITHUB_ENV - fi + - name: Selecting the Release type + id: release-type + uses: greenbone/actions/release-type@v2 + with: + release-type-input: ${{ inputs.release-type }} - name: Release with release action uses: greenbone/actions/release@v2 with: - python-version: "3.10" - conventional-commits: true github-user: ${{ secrets.GREENBONE_BOT }} github-user-mail: ${{ secrets.GREENBONE_BOT_MAIL }} github-user-token: ${{ secrets.GREENBONE_BOT_TOKEN }} gpg-key: ${{ secrets.GPG_KEY }} gpg-fingerprint: ${{ secrets.GPG_FINGERPRINT }} gpg-passphrase: ${{ secrets.GPG_PASSPHRASE }} - strategy: calendar - ref: ${{ env.RELEASE_REF }} + release-type: ${{ steps.release-type.outputs.release-type }} + release-version: ${{ inputs.release-version }} + ref: ${{ steps.release-type.outputs.release-ref }} + versioning-scheme: "semver"