123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238 |
- # Nightly build of a snapshot version
- # and a docker image which is pushed
- # to a docker registry
-
- name: Nightly image build and push
-
- on:
- workflow_dispatch:
- inputs:
- forced:
- description: 'Force run, independent of new commits'
- required: false
- default: 'false'
-
- schedule:
- - cron: '33 1 * * *'
-
-
- jobs:
-
- # Check if new commits were added since the last time this workflow ran.
- # The Github cache is used for this, using the SHA as the key.
-
- check_commits:
- name: Check for new commits
- runs-on: ubuntu-latest
- outputs:
- build: ${{ steps.cache-sha.outputs.cache-hit == false }}
-
- steps:
-
- - name: Cache marker for latest commit
- uses: actions/cache@v3
- id: cache-sha
- with:
- key: sha-${{ github.sha }}
- path: timestamp.txt
-
- - name: Register latest commit
- if: ${{ steps.cache-sha.outputs.cache-hit == false }}
- run: |
- echo "Current commit $GITHUB_SHA has no cache hit."
- date > timestamp.txt
- echo "Build job should be triggered now"
- cat timestamp.txt
-
- - name: Stop on no new commit
- if: ${{ steps.cache-sha.outputs.cache-hit }}
- run: |
- echo "Current commit $GITHUB_SHA was already seen."
- echo "Build job should be skipped."
- [ -f timestamp.txt ] && cat timestamp.txt
-
-
-
- # Build Gitblit GO so that it can be packed into a docker image.
- # The built tarball is saved as an artefact, it can be downloaded
- # by interested parties.
- # We could even do better and check if paths of source files changed,
- # but that is not that easy, so we build on any commit.
-
- build:
- name: build GO
- runs-on: ubuntu-latest
- needs: check_commits
- if: ${{ needs.check_commits.outputs.build == 'true' || github.event.inputs.forced == 'true' }}
-
- steps:
-
- - name: Checkout Gitblit
- uses: actions/checkout@v3
- with:
- submodules: true
-
- - name: Setup Java 8
- uses: actions/setup-java@v3
- with:
- java-version: 8
- distribution: 'temurin'
-
- - name: Report Java version
- run: |
- java -version
- javac -version
-
- - name: Build GO with Ant
- run: ant buildGO
-
- - name: Save built Gitblit package
- if: ${{ github.ref == 'refs/heads/master' || github.ref == 'refs/heads/develop' }}
- uses: actions/upload-artifact@v3
- with:
- name: gitblit-nightly
- path: build/target/gitblit-*-SNAPSHOT.tar.gz
-
-
-
- # This is a gating job, which checks if the secrets necessary for pushing an image
- # to the docker hub are present in the repository. This way this workflow can be
- # present in repos which cannot upload to the docker hub.
-
- secret-gate:
- name: Gate job checking for docker hub secret
- runs-on: ubuntu-latest
- needs: build
- outputs:
- build_docker: ${{steps.check-dh-login.outputs.secrets_present}}
-
- steps:
- - name: Check if we have the necessary data for docker
- id: check-dh-login
- run: |
- if [[ -n "${{secrets.DOCKERHUB_GB_TOKEN}}" && -n "${{secrets.DOCKERHUB_GB_USER}}" ]] ; then
- echo "secrets_present=true" >> $GITHUB_OUTPUT
- else
- echo "No Docker Hub login data found. Skipping Docker."
- fi
-
-
-
- # Only if the gating job signals success will this job run and build and push the docker image
- # built for the current snapshot version of Gitblit.
-
- docker:
- name: Build and push nightly docker image
- runs-on: ubuntu-latest
- if: needs.secret-gate.outputs.build_docker == 'true' && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/develop')
- needs: secret-gate
- env:
- GH_ORG: gitblit
- GITBLIT_VERSION: SNAPSHOT
-
- steps:
- - name: Checkout gitblit-docker
- uses: actions/checkout@v3
- with:
- repository: ${{ env.GH_ORG }}/gitblit-docker
- ref: master
- fetch-depth: 2
-
- - name: Download Gitblit nightly build
- uses: actions/download-artifact@v3
- id: get-gb
- with:
- name: gitblit-nightly
- path: ../gitblit-docker
-
- # Delete the artifact unless this is the official Gitblit repo
- - uses: geekyeggo/delete-artifact@v2
- if: ${{ github.repository != 'gitblit/gitblit' }}
- with:
- name: gitblit-nightly
- failOnError: false
-
- - name: Extract snapshot version
- id: gb-version
- working-directory: ../gitblit-docker
- run: |
- for file in $(ls -1 ${{steps.get-gb.outputs.download-path}}) ; do
- if [[ "$file" = gitblit-*.gz ]] ; then gbver=$file ; fi
- done
- gbver=${gbver%.tar.gz}
- gbver=${gbver##*gitblit-}
- echo "Version detected: $gbver"
- echo "GITBLIT_VERSION=$gbver" >> "${GITHUB_ENV}"
- echo "gb-version=$gbver" >> $GITHUB_OUTPUT
-
- - name: Generate Dockerfile for snapshot image
- working-directory: ../gitblit-docker
- run: |
- generate/generate_dockerfile.sh -v ${{ steps.gb-version.outputs.gb-version }} > generate/Dockerfile
- echo "BUILD_DATE=$(date +%Y-%m-%dT%H:%M:%S)" >> "${GITHUB_ENV}"
-
- - name: Login to Docker Hub
- uses: docker/login-action@v2
- with:
- username: ${{ secrets.DOCKERHUB_GB_USER }}
- password: ${{ secrets.DOCKERHUB_GB_TOKEN }}
-
- - name: Build snapshot docker image
- uses: docker/build-push-action@v3
- with:
- file: ../gitblit-docker/generate/Dockerfile
- context: ../gitblit-docker
- load: true
- tags: gitblit/gitblit:nightly
- labels: |
- org.label-schema.vcs-ref=${{github.sha}}
- org.label-schema.build-date=${{env.BUILD_DATE}}
- org.opencontainers.image.revision=${{ env.GITBLIT_GIT_SHA }}
- org.opencontainers.image.created=${{ env.BUILD_DATE }}
-
- - name: Install Goss for testing the docker image
- uses: e1himself/goss-installation-action@v1.0.4
- with:
- version: 'v0.3.16'
-
- - name: Test docker container - normal mode
- working-directory: ../gitblit-docker
- env:
- GOSS_WAIT_OPTS: "-r 15s -s 5s > /dev/null"
- run: |
- dgoss run -p 8080:8080 -p 8443:8443 gitblit/gitblit:nightly
-
- - name: Test docker container - bind mount
- working-directory: ../gitblit-docker
- env:
- GOSS_WAIT_OPTS: "-r 15s -s 5s > /dev/null"
- run: |
- mkdir gitblit-data
- mkdir gitblit-data/etc
- echo "This should not be overwritten" > gitblit-data/etc/gitblit.properties
- echo "include = gitblit-docker.properties" >> gitblit-data/etc/gitblit.properties
- sed -e '/mode: / d' -e '/group: / d' goss.yaml > gitblit-data/goss.yaml
- cp goss_wait.yaml gitblit-data/
- GOSS_FILES_PATH=gitblit-data dgoss run -p 8080:8080 -p 8443:8443 -v "$PWD/gitblit-data":/var/opt/gitblit gitblit/gitblit:nightly
- [ -d gitblit-data/srv/git ] || exit 1
- [ -f gitblit-data/etc/defaults.properties ] || exit 1
- grep --quiet "This should not be overwritten" gitblit-data/etc/gitblit.properties || exit 1
- sudo rm -rf gitblit-data
-
- - name: Test docker container - tmpfs
- working-directory: ../gitblit-docker
- env:
- GOSS_WAIT_OPTS: "-r 15s -s 5s > /dev/null"
- run: |
- dgoss run -p 8080:8080 -p 8443:8443 --tmpfs /var/opt/gitblit/temp gitblit/gitblit:nightly
-
- - name: Push docker image to registry
- uses: docker/build-push-action@v3
- with:
- file: ../gitblit-docker/generate/Dockerfile
- context: ../gitblit-docker
- push: true
- tags: gitblit/gitblit:nightly
- labels: |
- org.label-schema.vcs-ref=${{github.sha}}
- org.label-schema.build-date=${{env.BUILD_DATE}}
|