|
| 1 | +name: Trigger compute-rocm-dkms-afar job on push |
| 2 | + |
| 3 | +on: |
| 4 | + push: # This triggers the workflow on push events |
| 5 | + branches: |
| 6 | + - amd-staging |
| 7 | + workflow_dispatch: # This allows manual triggering of the workflow |
| 8 | + |
| 9 | +jobs: |
| 10 | + trigger_jenkins: |
| 11 | + runs-on: self-hosted |
| 12 | + |
| 13 | + steps: |
| 14 | + - name: Set environment variable for container image |
| 15 | + run: | |
| 16 | + echo "CONTAINER_IMAGE=${{ secrets.JENKINS_TRIGGER_DOCKER_IMAGE }}" >> $GITHUB_ENV |
| 17 | + echo "CONTAINER_NAME=my_container_${{ github.run_id }}" >> $GITHUB_ENV |
| 18 | +
|
| 19 | + - name: Pull container image |
| 20 | + run: docker pull "${{env.CONTAINER_IMAGE}}" |
| 21 | + |
| 22 | + - name: Run container |
| 23 | + run: | |
| 24 | + docker run -d --name "${{env.CONTAINER_NAME}}" $CONTAINER_IMAGE sleep infinity |
| 25 | + docker exec "${{env.CONTAINER_NAME}}" /bin/bash -c "echo 'Running commands inside the container'" |
| 26 | + |
| 27 | + - name: Trigger compute-rocm-dkms-afar job |
| 28 | + run: | |
| 29 | + docker exec "${{env.CONTAINER_NAME}}" /bin/bash -c "python -c \" |
| 30 | + import requests |
| 31 | + import time |
| 32 | + from requests.auth import HTTPBasicAuth |
| 33 | +
|
| 34 | + jenkins_user = '${{ secrets.CI_JENKINS_USER }}' |
| 35 | + jenkins_token = '${{ secrets.ROCM_JENKINS_CI_TOKEN }}' |
| 36 | + jenkins_host = '${{ secrets.ROCM_JENKINS_HOST }}' |
| 37 | + jenkins_job = '${{ secrets.ROCM_JENKINS_OSDB_JOB }}' |
| 38 | +
|
| 39 | + jenkins_url = f'{jenkins_host}/job/{jenkins_job}/buildWithParameters' |
| 40 | +
|
| 41 | + response = requests.post(jenkins_url, auth=HTTPBasicAuth(jenkins_user, jenkins_token)) |
| 42 | +
|
| 43 | + if response.status_code == 201: |
| 44 | + print('Jenkins job triggered successfully!') |
| 45 | + queue_url = response.headers.get('Location') |
| 46 | + if queue_url: |
| 47 | + print(f'Queue URL: {queue_url}') |
| 48 | + print(f'Getting build URL(max 5 attempts with 10seconds interval)...') |
| 49 | + # Poll the queue item to get the build number, limited to 5 attempts |
| 50 | + max_attempts = 5 |
| 51 | + attempts = 0 |
| 52 | + while attempts < max_attempts: |
| 53 | + queue_response = requests.get(queue_url + 'api/json', auth=HTTPBasicAuth(jenkins_user, jenkins_token)) |
| 54 | + queue_data = queue_response.json() |
| 55 | + if 'executable' in queue_data: |
| 56 | + build_number = queue_data['executable']['number'] |
| 57 | + build_url = f'{jenkins_host}/job/{jenkins_job}/{build_number}/' |
| 58 | + print(f'Build URL: {build_url}') |
| 59 | + break |
| 60 | + attempts += 1 |
| 61 | + time.sleep(10) # Wait for 10 seconds before polling again |
| 62 | + else: |
| 63 | + print('Exceeded maximum attempts to get the build URL. The trigger happened, so not failing the workflow') |
| 64 | + else: |
| 65 | + print('Build URL not found in the response headers.') |
| 66 | +
|
| 67 | + elif response.status_code == 200: |
| 68 | + print('Request was successful, but check the response content for details.') |
| 69 | + print(response.text) |
| 70 | + else: |
| 71 | + print(f'Failed to trigger Jenkins job. Status code: {response.status_code}') |
| 72 | + \"" |
| 73 | + |
| 74 | + - name: Stop and remove container |
| 75 | + if: always() |
| 76 | + run: | |
| 77 | + docker stop "${{env.CONTAINER_NAME}}" |
| 78 | + docker rm "${{env.CONTAINER_NAME}}" |
0 commit comments