diff --git a/.github/workflows/dockerpublish.yml b/.github/workflows/dockerpublish.yml new file mode 100644 index 0000000..21135a2 --- /dev/null +++ b/.github/workflows/dockerpublish.yml @@ -0,0 +1,131 @@ +name: Docker Publish + +# This workflow uses actions that are not certified by GitHub. +# They are provided by a third-party and are governed by +# separate terms of service, privacy policy, and support +# documentation. + +on: + workflow_dispatch: + release: + types: [published] + +env: + # Use docker.io for Docker Hub if empty + REGISTRY: ghcr.io + # github.repository as / + IMAGE_NAME: ${{ github.repository }} + RELEASE_TAG: ${{ github.event.release.tag_name }} + PLUGIN_VERSION: 1.0.11 + +jobs: + build: + name: 'Docker Publish' + runs-on: ubuntu-latest + environment: Dev + permissions: + contents: read + packages: write + # This is used to complete the identity challenge + # with sigstore/fulcio when running outside of PRs. + id-token: write + + steps: + # Checkout the release tag version + - name: Checkout repository ${{ env.RELEASE_TAG }} + uses: actions/checkout@v3 + with: + ref: ${{ env.RELEASE_TAG }} + + # Get git commit hash + - name: Get short hash + run: echo "sha_short=$(git rev-parse --short HEAD)" >> $GITHUB_ENV + + # Need to lower case the image name for the docker tags when publishing + - name: Downcase IMAGE_NAME variable + run: echo "IMAGE_NAME_LOWER=${IMAGE_NAME,,}" >> $GITHUB_ENV + + # Sort out the image tags + - name: Set initial tag + run: echo "IMAGE_TAGS=${{ env.REGISTRY }}/${{ env.IMAGE_NAME_LOWER }}:latest" >> $GITHUB_ENV + + #debug + - name: Log the tags + run: echo "Calculated tags value => ${{ env.IMAGE_TAGS }}" + + # Workaround: https://github.com/docker/build-push-action/issues/461 + - name: Setup Docker buildx + uses: docker/setup-buildx-action@79abd3f86f79a9d68a23c75a09a9a85889262adf + + # Login against a Docker registry except on PR + # https://github.com/docker/login-action + - name: Log into registry ${{ env.REGISTRY }} + if: github.event_name != 'pull_request' + uses: docker/login-action@28218f9b04b4f3f62068d7b6ce6ca5b26e35336c + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + # Extract metadata (tags, labels) for Docker + # https://github.com/docker/metadata-action + - name: Extract Docker metadata + id: meta + uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + + - name: Fetch Plugin + id: downloadfile # Remember to give an ID if you need the output + run: | + mkdir latest-cost-plugin + cd /home/runner/work/Grafana.Plugin.CostManagement/Grafana.Plugin.CostManagement/latest-cost-plugin + wget "https://github.com/DFE-Digital/Grafana.Plugin.CostManagement/releases/download/main/dfe-azurecostbackend-datasource-${{ env.PLUGIN_VERSION }}.zip" + wget "https://grafana.com/api/plugins/blackcowmoo-googleanalytics-datasource/versions/0.2.3/download" -O blackcowmoo-googleanalytics-datasource-0.2.3.zip + + - name: Unzip Plugin + run: | + cd /home/runner/work/Grafana.Plugin.CostManagement/Grafana.Plugin.CostManagement/latest-cost-plugin + unzip -o dfe-azurecostbackend-datasource-${{ env.PLUGIN_VERSION }}.zip + unzip -o blackcowmoo-googleanalytics-datasource-0.2.3.zip + cp /home/runner/work/Grafana.Plugin.CostManagement/Grafana.Plugin.CostManagement/grafana-files/grafana.ini . + cd /home/runner/work/Grafana.Plugin.CostManagement/Grafana.Plugin.CostManagement/latest-cost-plugin/dfe-azurecostbackend-datasource + pwd + ls + cd /home/runner/work/Grafana.Plugin.CostManagement/Grafana.Plugin.CostManagement + + + # 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 + id: build-and-push + uses: docker/build-push-action@ac9327eae2b366085ac7f6a2d02df8aa8ead720a + with: + context: . + push: ${{ github.event_name != 'pull_request' }} + tags: ghcr.io/dfe-digital/grafana.plugin.costmanagement:${{ env.PLUGIN_VERSION }} + labels: ${{ steps.meta.outputs.labels }} + build-args: | + VCSREF=${{ env.sha_short }} + VCSTAG=${{ env.RELEASE_TAG }} + cache-from: type=gha + cache-to: type=gha,mode=max + + # Sign the resulting Docker image digest except on PRs. + # This will only write to the public Rekor transparency log when the Docker + # repository is public to avoid leaking data. If you would like to publish + # transparency data even for private images, pass --force to cosign below. + # https://github.com/sigstore/cosign + - name: Install Cosign + uses: sigstore/cosign-installer@main + with: + cosign-release: 'v1.13.1' + - name: Check install! + run: cosign version + - name: Sign the published Docker image + if: ${{ github.event_name != 'pull_request' }} + env: + COSIGN_EXPERIMENTAL: "true" + # This step uses the identity token to provision an ephemeral certificate + # against the sigstore community Fulcio instance. + run: echo "${{ steps.meta.outputs.tags }}" | xargs -I {} cosign sign {}@${{ steps.build-and-push.outputs.digest }} \ No newline at end of file diff --git a/.github/workflows/publish-ghcr.yml b/.github/workflows/publish-ghcr.yml new file mode 100644 index 0000000..6c764f1 --- /dev/null +++ b/.github/workflows/publish-ghcr.yml @@ -0,0 +1,54 @@ +name: Build and Push Grafana Docker Image + +on: + workflow_dispatch: + release: + types: [published] + +env: + # Use docker.io for Docker Hub if empty + REGISTRY: ghcr.io + # github.repository as / + IMAGE_NAME: ${{ github.repository }} + RELEASE_TAG: ${{ github.event.release.tag_name }} + PLUGIN_VERSION: 1.0.11 + +jobs: + build-and-push: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Download Grafana Plugin + run: | + mkdir -p latest-cost-plugin + cd latest-cost-plugin + wget "https://github.com/DFE-Digital/Grafana.Plugin.CostManagement/releases/download/main/dfe-azurecostbackend-datasource-${{ env.PLUGIN_VERSION }}.zip" + wget "https://grafana.com/api/plugins/blackcowmoo-googleanalytics-datasource/versions/0.2.3/download" -O blackcowmoo-googleanalytics-datasource-0.2.3.zip + ls + unzip -o dfe-azurecostbackend-datasource-${{ env.PLUGIN_VERSION }}.zip + unzip -o blackcowmoo-googleanalytics-datasource-0.2.3.zip + cp /home/runner/work/Grafana.Plugin.CostManagement/Grafana.Plugin.CostManagement/grafana-files/grafana.ini . + cd .. + + # Login against a Docker registry except on PR + # https://github.com/docker/login-action + - name: Log into registry ${{ env.REGISTRY }} + if: github.event_name != 'pull_request' + uses: docker/login-action@28218f9b04b4f3f62068d7b6ce6ca5b26e35336c + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build Docker Image + run: | + docker build . -t ghcr.io/dfe-digital/grafana-azurecostplugin-grafana:${{ env.PLUGIN_VERSION }} + docker push ghcr.io/dfe-digital/grafana-azurecostplugin-grafana:${{ env.PLUGIN_VERSION }} + + env: + DOCKER_BUILDKIT: 1 + DOCKER_CLI_ACI: 1 + diff --git a/.gitignore b/.gitignore index c6bba59..34cb653 100644 --- a/.gitignore +++ b/.gitignore @@ -128,3 +128,27 @@ dist .yarn/build-state.yml .yarn/install-state.gz .pnp.* + +#GO Gitignore +# If you prefer the allow list template instead of the deny list, see community template: +# https://github.com/github/gitignore/blob/main/community/Golang/Go.AllowList.gitignore +# +# Binaries for programs and plugins +*.exe +*.exe~ +*.dll +*.so +*.dylib + +# Test binary, built with `go test -c` +*.test + +# Output of the go coverage tool, specifically when used with LiteIDE +*.out + +# Dependency directories (remove the comment below to include it) +# vendor/ + +# Go workspace file +go.work + diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..37c11c1 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,17 @@ +ARG grafana_version=latest +ARG grafana_image=grafana + +FROM grafana/${grafana_image}:${grafana_version} + +# Inject livereload script into grafana index.html +USER root + +COPY latest-cost-plugin/grafana.ini /etc/grafana/grafana.ini + +# Copy your plugin files into the Grafana plugins directory +COPY latest-cost-plugin/dfe-azurecostbackend-datasource /var/lib/grafana/plugins/dfe-azurecostbackend-datasource +COPY latest-cost-plugin/blackcowmoo-googleanalytics-datasource /var/lib/grafana/plugins/blackcowmoo-googleanalytics-datasource + +# Set permissions for the plugin directory +RUN chown -R 472:472 /var/lib/grafana/plugins/dfe-azurecostbackend-datasource +RUN chown -R 472:472 /var/lib/grafana/plugins/blackcowmoo-googleanalytics-datasource \ No newline at end of file diff --git a/README.md b/README.md index 5b3ed94..f6e901c 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,11 @@ # childrens-social-care-cpd-grafana Grafana Container Image for Childrens Social Care + +# Prerequisite +Docker is installed + +# Run Docker Image + +Click on the packages on the **main code** page then copy the command and paste that into a command window on your local PC + +This will use the latest release of the **Azure Cost Plugin** from **Grafana.Plugin.CostManagement** repo and will also install **Google Analytics** plugin (version may need to be updated in the github actions)