summaryrefslogtreecommitdiffstats
path: root/.github/workflows/promote.yml
blob: d84e4ad81e8baa3b25eda604268102417983b269 (plain)
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
118
119
120
---
name: Promote Release

env:
  LC_ALL: "C.UTF-8" # prevent ERROR: Ansible could not initialize the preferred locale: unsupported locale setting

on:
  release:
    types: [published]
  workflow_dispatch:
    inputs:
      tag_name:
        description: 'Name for the tag of the release.'
        required: true
permissions:
  contents: read # to fetch code (actions/checkout)

jobs:
  promote:
    if: endsWith(github.repository, '/awx')
    runs-on: ubuntu-latest
    timeout-minutes: 90
    steps:
      - name: Set GitHub Env vars for workflow_dispatch event
        if: ${{ github.event_name == 'workflow_dispatch' }}
        run: |
          echo "TAG_NAME=${{ github.event.inputs.tag_name }}" >> $GITHUB_ENV

      - name: Set GitHub Env vars if release event
        if: ${{ github.event_name == 'release' }}
        run: |
          echo "TAG_NAME=${{ github.event.release.tag_name }}" >> $GITHUB_ENV

      - name: Checkout awx
        uses: actions/checkout@v4
        with:
          show-progress: false

      - name: Get python version from Makefile
        run: echo py_version=`make PYTHON_VERSION` >> $GITHUB_ENV

      - name: Install python ${{ env.py_version }}
        uses: actions/setup-python@v4
        with:
          python-version: ${{ env.py_version }}

      - name: Install dependencies
        run: |
          python${{ env.py_version }} -m pip install wheel twine setuptools-scm

      - name: Set official collection namespace
        run: echo collection_namespace=awx >> $GITHUB_ENV
        if: ${{ github.repository_owner == 'ansible' }}

      - name: Set unofficial collection namespace
        run: echo collection_namespace=${{ github.repository_owner }} >> $GITHUB_ENV
        if: ${{ github.repository_owner != 'ansible' }}

      - name: Build collection and publish to galaxy
        env:
          COLLECTION_NAMESPACE: ${{ env.collection_namespace }}
          COLLECTION_VERSION: ${{ env.TAG_NAME }}
          COLLECTION_TEMPLATE_VERSION: true
        run: |
          sudo apt-get install jq
          make build_collection
          count=$(curl -s https://galaxy.ansible.com/api/v3/plugin/ansible/search/collection-versions/\?namespace\=${COLLECTION_NAMESPACE}\&name\=awx\&version\=${COLLECTION_VERSION} | jq .meta.count)
          if [[ "$count" == "1" ]]; then
              echo "Galaxy release already done";
          elif [[ "$count" == "0" ]]; then
              ansible-galaxy collection publish \
                --token=${{ secrets.GALAXY_TOKEN }} \
                awx_collection_build/${COLLECTION_NAMESPACE}-awx-${COLLECTION_VERSION}.tar.gz;
          else
              echo "Unexpected count from galaxy search: $count";
              exit 1;
          fi

      - name: Set official pypi info
        run: echo pypi_repo=pypi >> $GITHUB_ENV
        if: ${{ github.repository_owner == 'ansible' }}

      - name: Set unofficial pypi info
        run: echo pypi_repo=testpypi >> $GITHUB_ENV
        if: ${{ github.repository_owner != 'ansible' }}

      - name: Build awxkit and upload to pypi
        env:
          SETUPTOOLS_SCM_PRETEND_VERSION: ${{ env.TAG_NAME }}
        run: |
          git reset --hard
          cd awxkit && python3 setup.py sdist bdist_wheel
          twine upload \
            -r ${{ env.pypi_repo }} \
            -u ${{ secrets.PYPI_USERNAME }} \
            -p ${{ secrets.PYPI_PASSWORD }} \
            dist/*

      - name: Log in to GHCR
        run: |
          echo ${{ secrets.GITHUB_TOKEN }} | docker login ghcr.io -u ${{ github.actor }} --password-stdin

      - name: Log in to Quay
        run: |
          echo ${{ secrets.QUAY_TOKEN }} | docker login quay.io -u ${{ secrets.QUAY_USER }} --password-stdin

      - name: Re-tag and promote awx image
        run: |
          docker buildx imagetools create \
            ghcr.io/${{ github.repository }}:${{ env.TAG_NAME }} \
            --tag quay.io/${{ github.repository }}:${{ env.TAG_NAME }}
          docker buildx imagetools create \
            ghcr.io/${{ github.repository }}:${{ env.TAG_NAME }} \
            --tag quay.io/${{ github.repository }}:latest

      - name: Re-tag and promote awx-ee image
        run: |
          docker buildx imagetools create \
            ghcr.io/${{ github.repository_owner }}/awx-ee:${{ env.TAG_NAME }} \
            --tag quay.io/${{ github.repository_owner }}/awx-ee:${{ env.TAG_NAME }}