diff --git a/.github/workflows/build-pipeline.yml b/.github/workflows/build-pipeline.yml deleted file mode 100644 index e312d94..0000000 --- a/.github/workflows/build-pipeline.yml +++ /dev/null @@ -1,135 +0,0 @@ -# When code is pushed to a branch, run linting and tests, and -# then automatically increment the version number as appropriate for the branch source. -name: Lint and Test - -# Controls when the workflow will run -on: - # Triggers the workflow on push events - push: - branches: [ develop, release/**, main, feature/**, issue/**, issues/** ] - - # Allows you to run this workflow manually from the Actions tab - workflow_dispatch: - -jobs: - run_tests: - uses: ./.github/workflows/reusable_run_tests.yml - - bump_version: - needs: run_tests - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - - uses: actions/setup-python@v5 - with: - python-version: '3.10' - - - name: Install Poetry - uses: abatilo/actions-poetry@v3.0.0 - with: - poetry-version: 1.3.2 - - - name: Get version - id: get-version - run: | - echo "current_version=$(poetry version | awk '{print $2}')" >> $GITHUB_OUTPUT - echo "pyproject_name=$(poetry version | awk '{print $1}')" >> $GITHUB_ENV - -# - name: Bump pre-alpha version -# # If triggered by push to a feature branch -# if: | -# ${{ startsWith(github.ref, 'refs/heads/issue') }} || -# ${{ startsWith(github.ref, 'refs/heads/dependabot/') }} || -# ${{ startsWith(github.ref, 'refs/heads/feature/') }} -# run: | -# new_ver="${{ steps.get-version.outputs.current_version }}+$(git rev-parse --short ${GITHUB_SHA})" -# poetry version $new_ver -# echo "software_version=$(poetry version | awk '{print $2}')" >> $GITHUB_ENV -# -# - name: Bump alpha version -# # If triggered by push to the develop branch -# if: ${{ github.ref == 'refs/heads/develop' }} -# run: | -# poetry version prerelease -# echo "software_version=$(poetry version | awk '{print $2}')" >> $GITHUB_ENV -# echo "venue=sit" >> $GITHUB_ENV -# -# - name: Bump rc version -# # If triggered by push to a release branch -# if: ${{ startsWith(github.ref, 'refs/heads/release/') }} -# env: -# # True if the version already has a 'rc' pre-release identifier -# BUMP_RC: ${{ contains(steps.get-version.outputs.current_version, 'rc') }} -# run: | -# if [ "$BUMP_RC" = true ]; then -# poetry version prerelease -# else -# poetry version ${GITHUB_REF#refs/heads/release/}rc1 -# fi -# echo "software_version=$(poetry version | awk '{print $2}')" >> $GITHUB_ENV -# echo "venue=uat" >> $GITHUB_ENV -# -# - name: Release version -# # If triggered by push to the main branch -# if: ${{ startsWith(github.ref, 'refs/heads/main') }} -# env: -# CURRENT_VERSION: ${{ steps.get-version.outputs.current_version }} -# # Remove rc* from the end of version string -# # The ${string%%substring} syntax below deletes the longest match of $substring from back of $string. -# run: | -# poetry version ${CURRENT_VERSION%%rc*} -# echo "software_version=$(poetry version | awk '{print $2}')" >> $GITHUB_ENV -# echo "venue=ops" >> $GITHUB_ENV -# -# - name: Commit Version Bump -# # If building develop, a release branch, or main then we commit the version bump back to the repo -# if: | -# github.ref == 'refs/heads/develop' || -# github.ref == 'refs/heads/main' || -# startsWith(github.ref, 'refs/heads/release') -# run: | -# git config --global user.name 'batchee bot' -# git config --global user.email 'batchee@noreply.github.com' -# git commit -am "/version ${{ env.software_version }}" -# git push -# -# - name: Push Tag -# if: | -# github.ref == 'refs/heads/develop' || -# github.ref == 'refs/heads/main' || -# startsWith(github.ref, 'refs/heads/release') -# run: | -# git config user.name "${GITHUB_ACTOR}" -# git config user.email "${GITHUB_ACTOR}@users.noreply.github.com" -# git tag -a "${{ env.software_version }}" -m "Version ${{ env.software_version }}" -# git push origin "${{ env.software_version }}" - -# - name: Build Python Artifact -# run: | -# poetry build -# -# - uses: actions/upload-artifact@v3 -# with: -# name: python-artifact -# path: dist/* -# -# - name: Publish to test.pypi.org -# id: pypi-test-publish -# if: | -# github.ref == 'refs/heads/develop' || -# startsWith(github.ref, 'refs/heads/release') -# env: -# POETRY_PYPI_TOKEN_TESTPYPI: ${{secrets.POETRY_PYPI_TOKEN_TESTPYPI}} -# run: | -# poetry config repositories.testpypi https://test.pypi.org/legacy/ -# poetry publish -r testpypi -# -# - name: Publish to pypi.org -# if: ${{ github.ref == 'refs/heads/main' }} -# id: pypi-publish -# env: -# POETRY_PYPI_TOKEN_PYPI: ${{secrets.POETRY_PYPI_TOKEN_PYPI}} -# run: | -# poetry publish diff --git a/.github/workflows/pull-request-received.yml b/.github/workflows/pull_request.yml similarity index 83% rename from .github/workflows/pull-request-received.yml rename to .github/workflows/pull_request.yml index fbfe8c5..3bb60c9 100644 --- a/.github/workflows/pull-request-received.yml +++ b/.github/workflows/pull_request.yml @@ -10,4 +10,4 @@ on: jobs: build_and_test: - uses: ./.github/workflows/reusable_run_tests.yml + uses: ./.github/workflows/run_tests.yml diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml new file mode 100644 index 0000000..f39dfc8 --- /dev/null +++ b/.github/workflows/push.yml @@ -0,0 +1,195 @@ +# When code is pushed to a branch, run linting and tests, and +# then automatically increment the version number as appropriate for the branch source. +name: Lint and Test + +# Controls when the workflow will run +on: + # Triggers the workflow on push events + push: + branches: [ develop, release/**, main, feature/**, issue/**, issues/** ] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +env: + POETRY_VERSION: "1.3.2" + PYTHON_VERSION: "3.10" + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository }} + +jobs: + run_tests: + uses: ./.github/workflows/run_tests.yml + + bump_version: + needs: run_tests + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-python@v5 + with: + python-version: ${{ env.PYTHON_VERSION }} + + - name: Install Poetry + uses: abatilo/actions-poetry@v3.0.0 + with: + poetry-version: ${{ env.POETRY_VERSION }} + + - name: Get version + id: get-version + run: | + echo "current_version=$(poetry version | awk '{print $2}')" >> $GITHUB_OUTPUT + echo "pyproject_name=$(poetry version | awk '{print $1}')" >> $GITHUB_ENV + + - name: Bump pre-alpha version + # If triggered by push to a feature branch + if: | + ${{ startsWith(github.ref, 'refs/heads/issue') }} || + ${{ startsWith(github.ref, 'refs/heads/dependabot/') }} || + ${{ startsWith(github.ref, 'refs/heads/feature/') }} + run: | + new_ver="${{ steps.get-version.outputs.current_version }}+$(git rev-parse --short ${GITHUB_SHA})" + poetry version $new_ver + echo "software_version=$(poetry version | awk '{print $2}')" >> $GITHUB_ENV + + - name: Bump alpha version + # If triggered by push to the develop branch + if: ${{ github.ref == 'refs/heads/develop' }} + run: | + poetry version prerelease + echo "software_version=$(poetry version | awk '{print $2}')" >> $GITHUB_ENV + echo "venue=sit" >> $GITHUB_ENV + + - name: Bump rc version + # If triggered by push to a release branch + if: ${{ startsWith(github.ref, 'refs/heads/release/') }} + env: + # True if the version already has a 'rc' pre-release identifier + BUMP_RC: ${{ contains(steps.get-version.outputs.current_version, 'rc') }} + run: | + if [ "$BUMP_RC" = true ]; then + poetry version prerelease + else + poetry version ${GITHUB_REF#refs/heads/release/}rc1 + fi + echo "software_version=$(poetry version | awk '{print $2}')" >> $GITHUB_ENV + echo "venue=uat" >> $GITHUB_ENV + + - name: Release version + # If triggered by push to the main branch + if: ${{ startsWith(github.ref, 'refs/heads/main') }} + env: + CURRENT_VERSION: ${{ steps.get-version.outputs.current_version }} + # True if the version already has a 'rc' pre-release identifier + BUMP_RC: ${{ contains(steps.get-version.outputs.current_version, 'rc') }} + # True if the version already has an 'alpha' pre-release identifier + BUMP_A: ${{ contains(steps.get-version.outputs.current_version, 'a') }} + # True if the version already has a 'beta' pre-release identifier + BUMP_B: ${{ contains(steps.get-version.outputs.current_version, 'b') }} + # Remove rc* from the end of version string + # The ${string%%substring} syntax below deletes the longest match of $substring from back of $string. + run: | + if [ "$BUMP_RC" = true ]; then + poetry version ${CURRENT_VERSION%%rc*} + elif [ "$BUMP_B" = true ]; then + poetry version ${CURRENT_VERSION%%b*} + elif [ "$BUMP_A" = true ]; then + poetry version ${CURRENT_VERSION%%a*} + fi + echo "software_version=$(poetry version | awk '{print $2}')" >> $GITHUB_ENV + echo "venue=ops" >> $GITHUB_ENV + + - name: Log in to the Container registry + # TODO: change this and subsequent docker steps back to NOT (as follows), after testing in the feature branch --- if: ${{ !startsWith(github.ref, 'refs/heads/feature') }} + if: ${{ startsWith(github.ref, 'refs/heads/feature/') }} + uses: docker/login-action@v2 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata (tags, labels) for Docker +# if: ${{ !startsWith(github.ref, 'refs/heads/feature') }} + if: ${{ startsWith(github.ref, 'refs/heads/feature/') }} + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + tags: | + type=raw,pattern={{version}},value=${{ env.software_version }} + type=raw,value=${{ env.venue }} + +# - name: Wait for package +## if: ${{ !startsWith(github.ref, 'refs/heads/feature') }} +# if: ${{ startsWith(github.ref, 'refs/heads/feature/') }} +# run: | +# pip install tenacity +# ${GITHUB_WORKSPACE}/.github/workflows/wait-for-pypi.py ${{env.pyproject_name}}[harmony]==${{ env.software_version }} + + - name: Build and push Docker image +# if: ${{ !startsWith(github.ref, 'refs/heads/feature') }} + if: ${{ startsWith(github.ref, 'refs/heads/feature/') }} + id: docker-push + uses: docker/build-push-action@v3 + with: + context: . + file: Dockerfile + build-args: | + SOURCE=${{env.pyproject_name}}[harmony]==${{ env.software_version }} + push: true + pull: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} +# +# - name: Commit Version Bump +# # If building develop, a release branch, or main then we commit the version bump back to the repo +# if: | +# github.ref == 'refs/heads/develop' || +# github.ref == 'refs/heads/main' || +# startsWith(github.ref, 'refs/heads/release') +# run: | +# git config --global user.name 'batchee bot' +# git config --global user.email 'batchee@noreply.github.com' +# git commit -am "/version ${{ env.software_version }}" +# git push +# +# - name: Push Tag +# if: | +# github.ref == 'refs/heads/develop' || +# github.ref == 'refs/heads/main' || +# startsWith(github.ref, 'refs/heads/release') +# run: | +# git config user.name "${GITHUB_ACTOR}" +# git config user.email "${GITHUB_ACTOR}@users.noreply.github.com" +# git tag -a "${{ env.software_version }}" -m "Version ${{ env.software_version }}" +# git push origin "${{ env.software_version }}" + +# - name: Build Python Artifact +# run: | +# poetry build +# +# - uses: actions/upload-artifact@v3 +# with: +# name: python-artifact +# path: dist/* +# +# - name: Publish to test.pypi.org +# id: pypi-test-publish +# if: | +# github.ref == 'refs/heads/develop' || +# startsWith(github.ref, 'refs/heads/release') +# env: +# POETRY_PYPI_TOKEN_TESTPYPI: ${{secrets.POETRY_PYPI_TOKEN_TESTPYPI}} +# run: | +# poetry config repositories.testpypi https://test.pypi.org/legacy/ +# poetry publish -r testpypi +# +# - name: Publish to pypi.org +# if: ${{ github.ref == 'refs/heads/main' }} +# id: pypi-publish +# env: +# POETRY_PYPI_TOKEN_PYPI: ${{secrets.POETRY_PYPI_TOKEN_PYPI}} +# run: | +# poetry publish diff --git a/.github/workflows/reusable_run_tests.yml b/.github/workflows/run_tests.yml similarity index 100% rename from .github/workflows/reusable_run_tests.yml rename to .github/workflows/run_tests.yml diff --git a/CHANGELOG.md b/CHANGELOG.md index a60abf6..d2a5c5b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [issue/7](https://github.com/danielfromearth/batchee/issues/7): Create working Docker image - [issue/13](https://github.com/danielfromearth/batchee/issues/13): Add simple command line interface for testing - [issue/16](https://github.com/danielfromearth/batchee/issues/16): Add a logo +- [PR #75](https://github.com/danielfromearth/batchee/pull/75): Add Docker build steps to GitHub Actions workflow ### Changed - [issue/11](https://github.com/danielfromearth/batchee/issues/11): Rename from concat_batcher to batchee - [issue/21](https://github.com/danielfromearth/batchee/issues/21): Improve CICD workflows