From a32d91b234688e534ffba2f4c10bfd0c7d529da5 Mon Sep 17 00:00:00 2001 From: Allan Nava Date: Fri, 8 Mar 2024 16:17:02 +0100 Subject: [PATCH] first commit --- .github/dependabot.yml | 15 +++++ .github/workflows/docker-publish.yml | 88 ++++++++++++++++++++++++++++ .goreleaser.yml | 23 ++++++++ Dockerfile | 34 +++++++++++ Makefile | 16 +++++ config.sample.toml | 0 go.mod | 8 +++ handlers.go | 2 + main.go | 6 ++ 9 files changed, 192 insertions(+) create mode 100644 .github/dependabot.yml create mode 100644 .github/workflows/docker-publish.yml create mode 100644 .goreleaser.yml create mode 100644 Dockerfile create mode 100644 Makefile create mode 100644 config.sample.toml create mode 100644 go.mod create mode 100644 handlers.go create mode 100644 main.go diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..4b4801a --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,15 @@ +--- +version: 2 +updates: + - package-ecosystem: gomod + directory: / + schedule: + interval: weekly + - package-ecosystem: github-actions + directory: / + schedule: + interval: weekly + - package-ecosystem: gomod + directory: /tests + schedule: + interval: weekly \ No newline at end of file diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml new file mode 100644 index 0000000..3ad290e --- /dev/null +++ b/.github/workflows/docker-publish.yml @@ -0,0 +1,88 @@ +name: Docker Listmonk Onesignal +# +on: + push: + branches: + - master + - main + tags: + - '*' +# +jobs: + listmonk-onesignal-docker: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + steps: + # Checkout the repository to the GitHub Actions runner + - name: Checkout + uses: actions/checkout@v4 + + # Repo metadata + - name: Repo metadata + id: repo + uses: actions/github-script@v7 + with: + script: | + const repo = await github.rest.repos.get(context.repo) + return repo.data + # Prepare variables + - name: Prepare + id: prep + run: | + REG=ghcr.io + IMAGE=$(echo ${{ github.repository }} | tr '[:upper:]' '[:lower:]') + DOCKER_IMAGE=${REG}/${IMAGE} + VERSION=nool + if [ "${{ github.event_name }}" = "schedule" ]; then + VERSION=nightly + elif [[ $GITHUB_REF == refs/tags/* ]]; then + VERSION=${GITHUB_REF#refs/tags/} + elif [[ $GITHUB_REF == refs/heads/* ]]; then + VERSION=$(echo ${GITHUB_REF#refs/heads/} | sed -r 's#/+#-#g') + if [ "${{ github.event.repository.default_branch }}" = "$VERSION" ]; then + VERSION=latest + fi + elif [[ $GITHUB_REF == refs/pull/* ]]; then + VERSION=pr-${{ github.event.number }} + fi + TAGS="${DOCKER_IMAGE}:${VERSION}" + if [[ $VERSION =~ ^v[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then + MINOR=${VERSION%.*} + MAJOR=${MINOR%.*} + TAGS="$TAGS,${DOCKER_IMAGE}:${MINOR},${DOCKER_IMAGE}:${MAJOR},${DOCKER_IMAGE}:latest" + fi + echo ::set-output name=version::${VERSION} + echo ::set-output name=tags::${TAGS} + echo ::set-output name=created::$(date -u +'%Y-%m-%dT%H:%M:%SZ') + # Set up Buildx env + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + # Login + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + # Build image and push to registry + - name: Build and push + uses: docker/build-push-action@v5 + with: + context: . + file: ./Dockerfile + platforms: linux/amd64,linux/arm64 + push: true + tags: ${{ steps.prep.outputs.tags }} + labels: | + org.opencontainers.image.title=${{ fromJson(steps.repo.outputs.result).name }} + org.opencontainers.image.description=${{ fromJson(steps.repo.outputs.result).description }} + org.opencontainers.image.url=${{ fromJson(steps.repo.outputs.result).html_url }} + org.opencontainers.image.source=${{ fromJson(steps.repo.outputs.result).html_url }} + org.opencontainers.image.version=${{ steps.prep.outputs.version }} + org.opencontainers.image.created=${{ steps.prep.outputs.created }} + org.opencontainers.image.revision=${{ github.sha }} + org.opencontainers.image.licenses=${{ fromJson(steps.repo.outputs.result).license.spdx_id }} \ No newline at end of file diff --git a/.goreleaser.yml b/.goreleaser.yml new file mode 100644 index 0000000..f002070 --- /dev/null +++ b/.goreleaser.yml @@ -0,0 +1,23 @@ +env: + - CGO_ENABLED=0 + +builds: + - binary: listmonk-onesignal.bin + main: . + goos: + - windows + - darwin + - linux + - freebsd + - openbsd + - netbsd + goarch: + - amd64 + ldflags: + - -s -w -X "main.buildString={{ .Tag }} ({{ .ShortCommit }} {{ .Date }})" -X "main.versionString={{ .Tag }}" + +archives: + - format: tar.gz + files: + - README.md + - LICENSE \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..b581ad2 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,34 @@ +# Use an official Golang runtime as the base image +FROM --platform=${BUILDPLATFORM:-linux/amd64} golang:1.19 as builder + +ARG TARGETOS +ARG TARGETARCH +ARG TARGETPLATFORM +ARG BUILDPLATFORM + +# Set the working directory in the container +WORKDIR /app + +# Copy the source code to the container +COPY . . + +# Build the application +RUN CGO_ENABLED=0 GOOS=${TARGETOS} GOARCH=${TARGETARCH} make build + +# Use a lightweight Alpine image as the base image for the final container +FROM --platform=${TARGETPLATFORM:-linux/amd64} alpine:latest + +# Set the working directory in the container +WORKDIR /app + +# Copy the binary from the builder stage to the final container +COPY --from=builder /app/listmonk-onesignal.bin . + +# Copy the config.toml file (adjust the path if necessary) +#COPY config.toml . + +# Expose the port that the application listens on (adjust if necessary) +EXPOSE 8082 + +# Run the application +CMD ["./listmonk-onesignal.bin", "--config", "config.toml", "--msgr", "pinpoint", "--msgr", "ses"] \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..996ca36 --- /dev/null +++ b/Makefile @@ -0,0 +1,16 @@ +BIN := listmonk-onesignal.bin + +LAST_COMMIT := $(shell git rev-parse --short HEAD) +LAST_COMMIT_DATE := $(shell git show -s --format=%ci ${LAST_COMMIT}) +VERSION := $(shell git describe --abbrev=1) +BUILDSTR := ${VERSION} (build "\\\#"${LAST_COMMIT} $(shell date '+%Y-%m-%d %H:%M:%S')) + +build: + go build -o ${BIN} -ldflags="-X 'main.buildString=${BUILDSTR}'" *.go +.PHONY: build + +run: build + @./${BIN} +.PHONY: run + +.DEFAULT_GOAL := build \ No newline at end of file diff --git a/config.sample.toml b/config.sample.toml new file mode 100644 index 0000000..e69de29 diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..97fb69f --- /dev/null +++ b/go.mod @@ -0,0 +1,8 @@ +module github.com/HiWay-Media/listmonk-onesignal + +go 1.19 + + +require ( + github.com/knadh/listmonk v1.1.0 +) \ No newline at end of file diff --git a/handlers.go b/handlers.go new file mode 100644 index 0000000..c9ecbf5 --- /dev/null +++ b/handlers.go @@ -0,0 +1,2 @@ +package main + diff --git a/main.go b/main.go new file mode 100644 index 0000000..70babcc --- /dev/null +++ b/main.go @@ -0,0 +1,6 @@ +package main + + +func main() { + +} \ No newline at end of file