diff --git a/.github/workflows/packages.yml b/.github/workflows/packages.yml index af485c455..f2d9a4f83 100644 --- a/.github/workflows/packages.yml +++ b/.github/workflows/packages.yml @@ -13,6 +13,10 @@ on: - '**/*.md' - '**/*.asciidoc' +# Override the version if there is no tag release. +env: + ELASTIC_CI_POST_VERSION: ${{ startsWith(github.ref, 'refs/tags') && '' || github.run_id }} + jobs: build: runs-on: ubuntu-latest diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a2a48b62b..b1d0dff48 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -4,15 +4,18 @@ on: push: tags: - "v*.*.*" + branches: + - main permissions: contents: read jobs: test: - uses: ./.github/workflows/test.yml + uses: ./.github/workflows/test-release.yml with: full-matrix: true + enabled: ${{ startsWith(github.ref, 'refs/tags') }} packages: uses: ./.github/workflows/packages.yml @@ -31,10 +34,16 @@ jobs: with: name: packages path: dist - - name: Upload + - name: Upload pypi.org + if: startsWith(github.ref, 'refs/tags') uses: pypa/gh-action-pypi-publish@2f6f737ca5f74c637829c0f5c3acd0e29ea5e8bf with: repository-url: https://upload.pypi.org/legacy/ + - name: Upload test.pypi.org + if: ${{ ! startsWith(github.ref, 'refs/tags') }} + uses: pypa/gh-action-pypi-publish@2f6f737ca5f74c637829c0f5c3acd0e29ea5e8bf + with: + repository-url: https://test.pypi.org/legacy/ build-distribution: uses: ./.github/workflows/build-distribution.yml @@ -59,6 +68,7 @@ jobs: name: build-distribution path: ./build - name: Publish lambda layers to AWS + if: startsWith(github.ref, 'refs/tags') run: | # Convert v1.2.3 to ver-1-2-3 VERSION=${GITHUB_REF_NAME/v/ver-} @@ -66,6 +76,7 @@ jobs: ELASTIC_LAYER_NAME="elastic-apm-python-${VERSION}" .ci/publish-aws.sh - uses: actions/upload-artifact@v4 + if: startsWith(github.ref, 'refs/tags') with: name: arn-file path: ".arn-file.md" @@ -75,6 +86,8 @@ jobs: needs: - build-distribution runs-on: ubuntu-latest + env: + DOCKER_IMAGE_NAME: docker.elastic.co/observability/apm-agent-python steps: - uses: actions/checkout@v4 - uses: elastic/apm-pipeline-library/.github/actions/docker-login@current @@ -91,30 +104,35 @@ jobs: - id: setup-docker name: Set up docker variables run: |- - # version without v prefix (e.g. 1.2.3) - echo "tag=${GITHUB_REF_NAME/v/}" >> "${GITHUB_OUTPUT}" - echo "name=docker.elastic.co/observability/apm-agent-python" >> "${GITHUB_OUTPUT}" + if [ "${{ startsWith(github.ref, 'refs/tags') }}" == "false" ] ; then + # for testing purposes + echo "tag=test" >> "${GITHUB_OUTPUT}" + else + # version without v prefix (e.g. 1.2.3) + echo "tag=${GITHUB_REF_NAME/v/}" >> "${GITHUB_OUTPUT}" + fi - name: Docker build run: >- docker build - -t ${{ steps.setup-docker.outputs.name }}:${{ steps.setup-docker.outputs.tag }} + -t ${{ env.DOCKER_IMAGE_NAME }}:${{ steps.setup-docker.outputs.tag }} --build-arg AGENT_DIR=./build/dist/package/python . - name: Docker retag run: >- docker tag - ${{ steps.setup-docker.outputs.name }}:${{ steps.setup-docker.outputs.tag }} - ${{ steps.setup-docker.outputs.name }}:latest + ${{ env.DOCKER_IMAGE_NAME }}:${{ steps.setup-docker.outputs.tag }} + ${{ env.DOCKER_IMAGE_NAME }}:latest - name: Docker push + if: startsWith(github.ref, 'refs/tags') run: |- - docker push ${{ steps.setup-docker.outputs.name }}:${{ steps.setup-docker.outputs.tag }} - docker push ${{ steps.setup-docker.outputs.name }}:latest + docker push --all-tags ${{ env.DOCKER_IMAGE_NAME }} github-draft: permissions: contents: write needs: - publish-lambda-layers + if: startsWith(github.ref, 'refs/tags') runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 @@ -145,6 +163,7 @@ jobs: with: needs: ${{ toJSON(needs) }} - uses: elastic/apm-pipeline-library/.github/actions/notify-build-status@current + if: startsWith(github.ref, 'refs/tags') with: status: ${{ steps.check.outputs.status }} vaultUrl: ${{ secrets.VAULT_ADDR }} diff --git a/.github/workflows/test-release.yml b/.github/workflows/test-release.yml new file mode 100644 index 000000000..c873f9eb7 --- /dev/null +++ b/.github/workflows/test-release.yml @@ -0,0 +1,40 @@ +name: test-release + +on: + workflow_call: + inputs: + full-matrix: + description: "Run the full matrix" + required: true + type: boolean + ref: + description: "The git ref of elastic/apm-agent-python to run test workflow from." + required: false + type: string + enabled: + description: "Whether to run the workfow" + required: true + type: boolean + workflow_dispatch: + inputs: + full-matrix: + description: "Run the full matrix" + required: true + type: boolean + enabled: + description: "Whether to run the workfow" + required: true + type: boolean + +jobs: + test: + if: ${{ inputs.enabled }} + uses: ./.github/workflows/test.yml + with: + full-matrix: ${{ inputs.full-matrix }} + + run-if-disabled: + if: ${{ ! inputs.enabled }} + runs-on: ubuntu-latest + steps: + - run: echo "do something to help with the reusable workflows with needs" diff --git a/setup.py b/setup.py index 23ebec33e..a88cdeb5b 100644 --- a/setup.py +++ b/setup.py @@ -100,7 +100,11 @@ def get_version(): for line in version_file: if line.startswith("__version__"): version_tuple = ast.literal_eval(line.split(" = ")[1]) - return ".".join(map(str, version_tuple)) + version_str = ".".join(map(str, version_tuple)) + post_version = os.getenv("ELASTIC_CI_POST_VERSION") + if post_version: + return f"{version_str}.post{post_version}" + return version_str return "unknown"