name: Docker on: # schedule: # - cron: '0 10 1 * *' push: branches: [ master ] # Publish semver tags as releases. tags: [ '*.*.*' ] pull_request: branches: [ master ] env: # github.repository as / IMAGE_NAME: byjg/easy-haproxy jobs: Test: runs-on: ubuntu-latest permissions: contents: read packages: write steps: - name: Checkout repository uses: actions/checkout@v2 - name: Install requirements run: | cd src/ pip install -r requirements.txt - name: Run tests run: | cd src/ pytest -s tests/ -vv Build: runs-on: ubuntu-latest needs: Test permissions: contents: read packages: write steps: - name: Checkout repository uses: actions/checkout@v2 - name: Set up QEMU uses: docker/setup-qemu-action@v1 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v1 - name: Log into registry if: github.event_name != 'pull_request' || github.event.inputs.push == 'true' uses: docker/login-action@v1 with: registry: ${{ secrets.DOCKER_REGISTRY }} username: ${{ secrets.DOCKER_REGISTRY_USER }} password: ${{ secrets.DOCKER_REGISTRY_TOKEN }} # Extract metadata (tags, labels) for Docker # https://github.com/docker/metadata-action - name: Extract Docker metadata id: meta uses: docker/metadata-action@v3 with: images: ${{ secrets.DOCKER_REGISTRY }}/${{ env.IMAGE_NAME }} - uses: actions/github-script@v6 id: tags with: script: | tags = `${{ join(steps.meta.outputs.tags, ',') }}` result = [] tags.split("\n").forEach(function (item) { short_tag = item.trim().split(":")[1]; if (short_tag != "latest") { result.push(short_tag); } }) return result.join(","); result-encoding: string - name: Get result run: echo "${{ steps.tags.outputs.result }}" # Build and push Docker image with Buildx (don't push on PR) # https://github.com/docker/build-push-action - name: Build and push Docker image uses: docker/build-push-action@v2 with: context: . file: build/Dockerfile build-args: | RELEASE_VERSION_ARG="${{ steps.tags.outputs.result }}" platforms: linux/amd64,linux/arm64 push: ${{ github.event_name != 'pull_request' || github.event.inputs.push == 'true' }} tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} outputs: tags: "${{ steps.tags.outputs.result }}" # - name: Docker Hub Description # if: github.event_name != 'pull_request' || github.event.inputs.push == 'true' # run: | # wget -q https://github.com/christian-korneck/docker-pushrm/releases/download/v1.8.0/docker-pushrm_linux_amd64 -O $HOME/.docker/cli-plugins/docker-pushrm # chmod +x $HOME/.docker/cli-plugins/docker-pushrm # docker pushrm ${{ env.IMAGE_NAME }} Helm: runs-on: 'ubuntu-latest' needs: Build if: github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags/') env: DOC_GITHUB_TOKEN: '${{ secrets.DOC_TOKEN }}' steps: - uses: actions/checkout@v3 if: startsWith(github.ref, 'refs/tags/') with: ref: master - uses: actions/checkout@v3 if: github.ref == 'refs/heads/master' - name: Get result run: echo "${{ needs.Build.outputs.tags }}" - name: Update versions if: startsWith(github.ref, 'refs/tags/') run: | TAG="${{ needs.Build.outputs.tags }}" CURRENT_VERSION=$(grep "appVersion: " helm/easyhaproxy/Chart.yaml | sed 's#appVersion: "\(.*\)"#\1#g') if [ "$TAG" = "$CURRENT_VERSION" ]; then echo "Skipping update version..." else sed -i "s#easy-haproxy:[a-zA-Z0-9\.-]*#easy-haproxy:$TAG#g" deploy/docker/docker-compose.yml sed -i "s#version: \"[a-zA-Z0-9\.-]*\"#version: \"$TAG\"#g" deploy/kubernetes/easyhaproxy-*.yml sed -i "s#easy-haproxy:[a-zA-Z0-9\.-]*#easy-haproxy:$TAG#g" deploy/kubernetes/easyhaproxy-*.yml sed -i "s#easy-haproxy/[a-zA-Z0-9\.-]*/#easy-haproxy/$TAG/#g" docs/kubernetes.md sed -i "s#appVersion: \"[a-zA-Z0-9\.-]*\"#appVersion: \"$TAG\"#g" helm/easyhaproxy/Chart.yaml find examples -type f -name '*.yml' -exec sed -i "s#\(byjg/easy-haproxy:\)[a-zA-Z0-9\.-]*#\1$TAG#g" {} \; -print VERSION=$(grep "version: " helm/easyhaproxy/Chart.yaml | sed 's#version: ##g') NEW_VERSION=$(echo $VERSION | awk -F. '/[0-9]+\./{$NF++;print}' OFS=.) sed -i "s#version: [a-zA-Z0-9\.]*#version: $NEW_VERSION#g" helm/easyhaproxy/Chart.yaml sed -i "s#chart: easyhaproxy-[a-zA-Z0-9\.]*#chart: easyhaproxy-$NEW_VERSION#g" deploy/kubernetes/easyhaproxy-*.yml git add . git config --global user.name "$GITHUB_ACTOR CI/CD" git config --global user.email "info@byjg.com.br" git commit -m "[skip ci] Update from $CURRENT_VERSION to $TAG" git push fi - run: curl https://opensource.byjg.com/add-helm.sh | bash /dev/stdin helm easyhaproxy Documentation: runs-on: 'ubuntu-latest' needs: Helm if: github.ref == 'refs/heads/master' env: DOC_GITHUB_TOKEN: '${{ secrets.DOC_TOKEN }}' steps: - uses: actions/checkout@v2 - run: curl https://opensource.byjg.com/add-doc.sh | bash /dev/stdin devops docker-easy-haproxy docs