Nightly Release - Build #30
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| --- | |
| name: Nightly Release - Build | |
| on: | |
| workflow_call: | |
| inputs: | |
| branch: | |
| type: string | |
| required: true | |
| nightly: | |
| type: boolean | |
| required: true | |
| secrets: | |
| token: | |
| required: false | |
| registry: | |
| required: false | |
| registry_user: | |
| required: false | |
| registry_password: | |
| required: false | |
| outputs: | |
| api_image: | |
| description: GHCR.io image tag for downstream consumption | |
| value: ${{ jobs.release.outputs.api_image }} | |
| migration_image: | |
| description: Modified CWMS Schema installer image | |
| value: ${{ jobs.release.outputs.migration_image }} | |
| workflow_dispatch: | |
| inputs: | |
| branch: | |
| type: choice | |
| required: true | |
| description: Which Branch to make the build from | |
| options: | |
| - develop | |
| - test | |
| nightly: | |
| type: boolean | |
| required: true | |
| description: Is this part of a "nightly" workflow? | |
| default: true | |
| jobs: | |
| release: | |
| runs-on: ubuntu-latest | |
| permissions: | |
| packages: write | |
| contents: write | |
| outputs: | |
| api_image: ${{steps.set_image.outputs.api_image}} | |
| migration_image: ${{steps.migration-publish.outputs.image}} | |
| steps: | |
| - name: Clean up disk space, so we don't run out. | |
| if: matrix.platform == 'ubuntu-latest' | |
| run: | | |
| sudo rm -rf /usr/share/dotnet | |
| sudo rm -rf /usr/local/lib/android | |
| sudo rm -rf /opt/ghc | |
| - name: checkout code | |
| uses: actions/checkout@v5.0.0 | |
| with: | |
| ref: ${{inputs.branch}} | |
| - name: setup java | |
| uses: actions/setup-java@v5.2.0 | |
| with: | |
| distribution: 'temurin' | |
| java-version: '11' | |
| cache: 'gradle' | |
| - name: Set version | |
| if: inputs.nightly == true | |
| run: echo "VERSION=${{inputs.branch}}-nightly" >> $GITHUB_ENV | |
| - name: Set version | |
| if: inputs.nightly == false | |
| run: echo "VERSION=${{inputs.branch}}" >> $GITHUB_ENV | |
| - name: Sanitize repo for container image names | |
| run: | | |
| REPO=`echo "${{github.repository}}" | tr '[:upper:]' '[:lower:]'` | |
| echo "REPO=$REPO" >> $GITHUB_ENV | |
| - name: show version | |
| run: echo ${VERSION} | |
| - name: build war | |
| run: ./gradlew build --info --init-script init.gradle -PversionOverride=$VERSION | |
| - name: Create GitHub Release | |
| id: create_release | |
| # Allow testing without creating a release | |
| if: github.event_name != 'pull_request' && (github.event.ref == 'refs/heads/develop' || startsWith(github.event.ref, 'refs/tags')) | |
| uses: softprops/action-gh-release@v2.5.0 | |
| with: | |
| files: cwms-data-api/build/libs/cwms-data-api-${{env.VERSION}}.war | |
| tag_name: ${{env.VERSION}} | |
| generate_release_notes: true | |
| token: ${{ secrets.token != null && secrets.token || secrets.GITHUB_TOKEN }} | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3.11.1 | |
| - name: Docker meta | |
| id: meta | |
| uses: docker/metadata-action@v5.8.0 | |
| with: | |
| # this is triggered by the schedule so we want to actually use the checked out information | |
| # and not the context from the workflow itself. | |
| context: git | |
| images: | | |
| ${{secrets.registry != null && secrets.registry ||secrets.HEC_PUB_REGISTRY}}/cwms/data-api | |
| ghcr.io/${{env.REPO}} | |
| tags: | | |
| type=sha | |
| type=ref,event=tag | |
| type=raw,value=${{env.VERSION}} | |
| type=schedule,pattern=${{inputs.branch}}-{{date 'YYYY.MM.DD'}} | |
| type=schedule,pattern=${{inputs.branch}}-{{date 'YYYY.MM.DD-hhmmss'}} | |
| - name: Log in to the Container registry | |
| id: login-ghcr | |
| uses: docker/login-action@v3.5.0 | |
| with: | |
| registry: ghcr.io | |
| username: ${{ github.actor }} | |
| password: ${{ secrets.token != null && secrets.token || secrets.GITHUB_TOKEN }} | |
| - name: Login to HEC Public Registry | |
| uses: docker/login-action@v3.5.0 | |
| id: login-hec | |
| with: | |
| registry: ${{ secrets.registry != null && secrets.registry ||secrets.HEC_PUB_REGISTRY }} | |
| username: ${{ secrets.registry_user != null && secrets.registry_user || secrets.ALT_REG_USER }} | |
| password: ${{ secrets.registry_password != null && secrets.registry_password || secrets.ALT_REG_PASSWORD }} | |
| - name: Build and push | |
| uses: docker/build-push-action@v6.18.0 | |
| with: | |
| context: "." | |
| # This is not conditional on pull_request as we want access to these if we are manually running it. | |
| push: true | |
| sbom: true | |
| tags: ${{ steps.meta.outputs.tags }} | |
| labels: ${{ steps.meta.outputs.labels }} | |
| - name: Set Output Image | |
| id: set_image | |
| run: | | |
| echo "api_image=ghcr.io/${REPO}:$VERSION" >> $GITHUB_OUTPUT | |
| - name: Setup Database Migration Image | |
| id: migration | |
| uses: ./.github/actions/database-migration-image | |
| with: | |
| base-image: ghcr.io/hydrologicengineeringcenter/cwms-database/cwms/schema_installer | |
| tag: latest-dev | |
| - name: Publish migration container | |
| id: migration-publish | |
| run: | | |
| IMAGE=ghcr.io/${REPO}-schema-migration:$VERSION | |
| docker tag ${{steps.migration.outputs.image}} $IMAGE | |
| docker push $IMAGE | |
| echo "image=$IMAGE" >> $GITHUB_OUTPUT | |
| - name: Logout of HEC pub registry | |
| if: ${{ always() }} | |
| run: | | |
| docker logout ${{ steps.login-hec.outputs.registry }} | |
| - name: Logout of GH registry | |
| if: ${{ always() }} | |
| run: | | |
| docker logout ${{ steps.login-ghcr.outputs.registry }} |