Skip to content

Build docker image on CI #408

Build docker image on CI

Build docker image on CI #408

name: Build, Test and Deploy GumTree
on:
push:
branches: [ main ]
tags:
- 'v*'
pull_request:
branches: [ main ]
schedule:
- cron: '59 23 * * SUN'
workflow_dispatch:
concurrency:
group: "build-${{ github.head_ref || github.ref }}"
cancel-in-progress: true
jobs:
build-test-deploy:
runs-on: ubuntu-latest
container: gumtreediff/gumtree:latest
environment: MavenCentral
if: "!(contains(github.event.head_commit.message, '[no ci]') || startsWith(github.event.head_commit.message, 'doc'))"
steps:
- name: checkout gumtree
uses: actions/checkout@v4
with:
submodules: recursive
show-progress: ''
- name: retrieve gumtree version
id: version
run: echo "::set-output name=version::$(cat build.gradle | grep "projectsVersion =" | cut -f 2 -d "'")"
shell: bash
- name: build gumtree
run: ./gradlew -PtestNative build :benchmark:runOnDefects4J :benchmark:ciDefects4JAnalysis
- name: upload defects4j results
uses: actions/upload-artifact@v2
with:
name: defects4j-report
path: benchmark/build/reports/defects4j*
- name: generate jacoco report
run: ./gradlew jacocoRootReport
- name: upload coverage report
uses: actions/upload-artifact@v2
with:
name: coverage-report
path: build/reports/jacoco/jacocoRootReport/html/
- name: generate test report
run: ./gradlew testReport
- name: upload test report
uses: actions/upload-artifact@v2
with:
name: test-report
path: build/reports/tests
- name: upload snapshot package
if: "github.event_name == 'schedule' && contains(steps.version.outputs.version, 'SNAPSHOT')"
run: ./gradlew publish
env:
ORG_GRADLE_PROJECT_sonatypeUsername: ${{ secrets.ORG_GRADLE_PROJECT_SONATYPEUSERNAME }}
ORG_GRADLE_PROJECT_sonatypePassword: ${{ secrets.ORG_GRADLE_PROJECT_SONATYPEPASSWORD }}
- name: upload release package
if: "github.event_name == 'push' && !contains(steps.version.outputs.version, 'SNAPSHOT') && endsWith(github.ref, steps.version.outputs.version)"
run: ./gradlew publishToSonatype closeAndReleaseSonatypeStagingRepository
env:
ORG_GRADLE_PROJECT_sonatypeUsername: ${{ secrets.ORG_GRADLE_PROJECT_SONATYPEUSERNAME }}
ORG_GRADLE_PROJECT_sonatypePassword: ${{ secrets.ORG_GRADLE_PROJECT_SONATYPEPASSWORD }}
ORG_GRADLE_PROJECT_gumtreeKey: ${{ secrets.GUMTREE_KEY }}
ORG_GRADLE_PROJECT_gumtreeKeyPassphrase: ${{ secrets.GUMTREE_KEY_PASSPHRASE }}
- name: create github release
if: "github.event_name == 'push' && !contains(steps.version.outputs.version, 'SNAPSHOT') && endsWith(github.ref, steps.version.outputs.version)"
uses: ncipollo/release-action@v1
with:
artifacts: "dist/build/distributions/gumtree*.zip"
bodyFile: "CHANGELOG.md"
token: ${{ secrets.GITHUB_TOKEN }}
- name: set up docker buildx
uses: docker/setup-buildx-action@v3
- name: Cache Docker layers
uses: actions/cache@v3
with:
path: /tmp/.buildx-cache
key: ${{ runner.os }}-buildx
- name: Check secrets presence
id: checksecrets
shell: bash
run: |
if [ "$SECRET" == "" ]; then
echo "secretspresent=false" >> $GITHUB_OUTPUT
else
echo "secretspresent=true" >> $GITHUB_OUTPUT
fi
env:
SECRET: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Login to Docker Hub
uses: docker/login-action@v3
if: (steps.checksecrets.outputs.secretspresent == 'true')
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Set Docker Image Tag
id: set-tag
if: (steps.checksecrets.outputs.secretspresent == 'true')
run: |
if [[ $GITHUB_REF == refs/tags/v* ]]; then
echo "IMAGE_TAG=$(echo $GITHUB_REF | sed 's/refs\/tags\///')" >> $GITHUB_ENV
else
echo "IMAGE_TAG=latest" >> $GITHUB_ENV
fi
- name: Build and Push Docker Image
uses: docker/build-push-action@v5
with:
file: 'docker/Dockerfile'
push: ${{ steps.checksecrets.outputs.secretspresent }}
tags: gumtreediff/gumtree:${{ env.IMAGE_TAG }}