--- name: Release collection on: workflow_dispatch: jobs: release: runs-on: ubuntu-latest if: github.repository == 'ansible-middleware/keycloak' permissions: actions: write checks: write contents: write deployments: write packages: write pages: write steps: - name: Checkout code uses: actions/checkout@v2 - name: Fetch tags run: git fetch --depth=1 origin +refs/tags/*:refs/tags/* - name: Set up Python uses: actions/setup-python@v1 with: python-version: "3.x" - name: Get current version id: get_version run: echo "::set-output name=TAG_VERSION::$(grep version galaxy.yml | awk -F'"' '{ print $2 }')" - name: Check if tag exists id: check_tag run: echo "::set-output name=TAG_EXISTS::$(git tag | grep ${{ steps.get_version.outputs.TAG_VERSION }})" - name: Fail if tag exists if: ${{ steps.get_version.outputs.TAG_VERSION == steps.check_tag.outputs.TAG_EXISTS }} uses: actions/github-script@v3 with: script: | core.setFailed('Release tag already exists') - name: Install dependencies run: | python -m pip install --upgrade pip pip install ansible-core antsibull sudo apt install -y sed hub - name: Build collection run: | ansible-galaxy collection build . - name: Scan PR merges from latest tag run: | TYPES=("minor_changes" "major_changes" "bugfixes" "deprecated_features" "removed_features" "breaking_changes") TAG=$(git describe --abbrev=0 --tags) PRS=($(comm -12 <(git log --oneline ${TAG}.. --format="tformat:%H" | sort ) <(hub pr list -s all -f '%sm%n' --color=never | sort ))) IFS=$'\n' FRAGMENTS=($(hub pr list -s all -f '%sm~%I~%L~%t~%n' --color=never| grep -P "$(echo "^(${PRS[@]})" | tr ' ' '|')")) for frag in "${FRAGMENTS[@]}"; do PR=$(echo $frag|cut -d~ -f2) type="$(echo $frag|cut -d~ -f3)" msg="$(echo $frag|cut -d~ -f4|sed 's/`/``/g')" if [[ "${TYPES[*]}" =~ "${type}" ]]; then echo -e "$type:\n - >\n $msg \`#${PR}\`_" \ > changelogs/fragments/${PR}.yaml fi done antsibull-changelog lint -vvv antsibull-changelog generate antsibull-changelog release env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Commit changelogs run: | git config user.name github-actions git config user.email github-actions@github.com git add CHANGELOG.rst changelogs/changelog.yaml git commit -m "Update changelog for release ${{ steps.get_version.outputs.TAG_VERSION }}" || true git push origin - name: Publish collection env: ANSIBLE_GALAXY_API_KEY: ${{ secrets.ANSIBLE_GALAXY_API_KEY }} run: | ansible-galaxy collection publish *.tar.gz --api-key $ANSIBLE_GALAXY_API_KEY - name: Create release tag run: | git config user.name github-actions git config user.email github-actions@github.com git tag -a ${{ steps.get_version.outputs.TAG_VERSION }}" -m "Release v${{ steps.get_version.outputs.TAG_VERSION }}" || true git push origin --tags - name: Publish Release uses: softprops/action-gh-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: files: "*.tar.gz" body: "Release v${{ steps.get_version.outputs.TAG_VERSION }}" dispatch: needs: release strategy: matrix: repo: ['ansible-middleware/cross-dc-rhsso-demo', 'ansible-middleware/flange-demo', 'ansible-middleware/ansible-middleware-ee'] runs-on: ubuntu-latest steps: - name: Repository Dispatch uses: peter-evans/repository-dispatch@v1 with: token: ${{ secrets.TRIGGERING_PAT }} repository: ${{ matrix.repo }} event-type: "Dependency released - Keycloak v${{ steps.get_version.outputs.TAG_VERSION }}" client-payload: '{ "github": ${{toJson(github)}} }'