Skip to content

Commit

Permalink
Merge branch 'main' into retry
Browse files Browse the repository at this point in the history
# Conflicts:
#	main.go
#	pkg/cloudflare/updater.go
  • Loading branch information
cromefire committed Oct 22, 2023
2 parents 0eaa74f + 2a688c4 commit e978d98
Show file tree
Hide file tree
Showing 488 changed files with 640 additions and 269,086 deletions.
7 changes: 7 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,10 @@ end_of_line = lf
insert_final_newline = true
charset = utf-8
trim_trailing_whitespace = true
indent_size = 2
indent_style = space
tab_width = 2

[*.go]
indent_size = 4
tab_width = 4
241 changes: 241 additions & 0 deletions .github/workflows/docker-publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,241 @@
name: Docker

# 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:
push:
branches: [ "main" ]
# Publish semver tags as releases.
tags: [ 'v*.*.*' ]
pull_request:
branches: [ "main" ]

env:
# Use docker.io for Docker Hub if empty
REGISTRY: ghcr.io
# github.repository as <account>/<repo>
IMAGE_NAME: ${{ github.repository }}

jobs:
build:
strategy:
fail-fast: false
matrix:
platform:
- docker: linux/amd64
go: amd64
- docker: linux/arm/v6
go: arm
qemu: arm
dockerfile: alpine.Dockerfile
- docker: linux/arm/v7
go: arm
qemu: arm
- docker: linux/arm64
go: arm64
qemu: arm64
runs-on: ubuntu-latest
permissions:
contents: read
packages: write

steps:
- name: Checkout repository
uses: actions/checkout@v3

- name: Set up QEMU
uses: docker/[email protected]
if: matrix.platform.qemu
with:
platforms: ${{ matrix.platform.qemu }}

# Set up BuildKit Docker container builder to be able to build
# multi-platform images and export cache
# https://github.com/docker/setup-buildx-action
- name: Set up Docker Buildx
uses: docker/[email protected]

- name: Go package cache
uses: actions/cache@v3
with:
path: go-package-cache
key: ${{ matrix.platform.go }}-docker-go-package-${{ hashFiles('go.sum') }}
restore-keys: |
${{ matrix.platform.go }}-docker-go-package-
- name: Go build cache
uses: actions/cache@v3
with:
path: go-build-cache
key: ${{ matrix.platform.go }}-docker-go-build-${{ hashFiles('go.sum') }}
restore-keys: |
${{ matrix.platform.go }}-docker-go-build-
- name: Inject go package cache into docker
uses: reproducible-containers/[email protected]
with:
cache-source: go-package-cache
cache-target: /root/go/pkg/mod

- name: Inject go build cache into docker
uses: reproducible-containers/[email protected]
with:
cache-source: go-build-cache
cache-target: /root/.cache/go-build

# 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/[email protected]
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/[email protected]
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}

# 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 in PR
id: build-and-push-pr
uses: docker/[email protected]
if: github.event_name == 'pull_request'
with:
context: .
file: ${{ matrix.platform.dockerfile && matrix.platform.dockerfile || 'Dockerfile' }}
build-args: GOARCH=${{ matrix.platform.go }}
platforms: ${{ matrix.platform.docker }}
push: false
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max

# Build and push Docker image with Buildx (push if not on PR)
# https://github.com/docker/build-push-action
- name: Build and push Docker image outside Branch
id: build-and-push
uses: docker/[email protected]
if: github.event_name != 'pull_request'
with:
context: .
file: ${{ matrix.platform.dockerfile && matrix.platform.dockerfile || 'Dockerfile' }}
build-args: GOARCH=${{ matrix.platform.go }}
platforms: ${{ matrix.platform.docker }}
push: true
labels: ${{ steps.meta.outputs.labels }}
# Wait for https://github.com/docker/build-push-action/issues/958
#annotations: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
outputs: type=registry,name=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }},push-by-digest=true,name-canonical=true

- name: Export digest
if: github.event_name != 'pull_request'
run: |
mkdir -p /tmp/digests
digest="${{ steps.build-and-push.outputs.digest }}"
touch "/tmp/digests/${digest#sha256:}"
- name: Upload digest
if: github.event_name != 'pull_request'
uses: actions/upload-artifact@v3
with:
name: digests
path: /tmp/digests/*
if-no-files-found: error
retention-days: 1
create-manifests:
runs-on: ubuntu-latest
needs: [ build ]
if: github.event_name != 'pull_request'
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:
- name: Download digests
uses: actions/download-artifact@v3
with:
name: digests
path: /tmp/digests

# Login against a Docker registry except on PR
# https://github.com/docker/login-action
- name: Log into registry ${{ env.REGISTRY }}
uses: docker/[email protected]
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

# Install the cosign tool except on PR
# https://github.com/sigstore/cosign-installer
- name: Install cosign
uses: sigstore/[email protected]
with:
cosign-release: 'v2.2.0'


# Extract metadata (tags, labels) for Docker
# https://github.com/docker/metadata-action
- name: Extract Docker metadata
id: meta
uses: docker/[email protected]
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
type=edge,branch=main
type=ref,event=branch
type=ref,event=pr
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}
type=sha,enable=false
- name: Create manifest list and push
working-directory: /tmp/digests
run: |
TAGS="$(jq -crj '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON")"
docker buildx imagetools create ${TAGS} \
$(printf '${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}@sha256:%s ' *)
# 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: Sign the published Docker image
working-directory: /tmp/digests
# This step uses the identity token to provision an ephemeral certificate
# against the sigstore community Fulcio instance.
run: |
RAW_TAGS="$(jq -crj '.tags | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON")"
TAGS=""
for RAW_TAG in ${RAW_TAGS}; do
TAGS="${TAGS}$(printf "${RAW_TAG}@sha256:%s " *)"
done
for TAG in ${TAGS}; do
echo "Signing ${TAG}"
cosign sign --yes "${TAG}"
done
- name: Inspect image
run: |
RAW_TAGS="$(jq -crj '.tags | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON")"
for RAW_TAG in ${RAW_TAGS}; do
echo "Inspecting ${RAW_TAG}"
docker buildx imagetools inspect "${RAW_TAG}"
done
59 changes: 59 additions & 0 deletions .github/workflows/go.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
name: Go

on:
push:
branches: [ "main" ]
tags: [ 'v*.*.*' ]
pull_request:
branches: [ "main" ]

jobs:
build:
strategy:
matrix:
target:
- arch: amd64
os: linux
- arch: arm
os: linux
- arch: arm64
os: linux
- arch: riscv64
os: linux
- arch: wasm
os: wasip1
ext: .wasm
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3

- name: Set up Go
uses: actions/setup-go@v4
with:
go-version: '1.21'

- name: "Go cache"
uses: actions/cache@v3
with:
path: |
~/.cache/go-build
~/go/pkg/mod
key: ${{ runner.os }}-go-${{ hashFiles('go.sum') }}
restore-keys: |
${{ runner.os }}-go-
- name: Build
env:
CGO_ENABLED: 0
GOOS: ${{ matrix.target.os }}
GOARCH: ${{ matrix.target.arch }}
run: go build -v -o fritzbox-cloudflare-dyndns${{ matrix.target.ext }} .

- name: Tar up
run: tar -cJf "fritzbox-cloudflare-dyndns-${{ matrix.target.arch }}.tar.xz" fritzbox-cloudflare-dyndns${{ matrix.target.ext }}

- name: Upload a Build Artifact
uses: actions/[email protected]
with:
name: fritzbox-cloudflare-dyndns-${{ matrix.target.arch }}
path: fritzbox-cloudflare-dyndns-${{ matrix.target.arch }}.tar.xz
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
.env
.idea/
/fritzbox-cloudflare-dyndns
8 changes: 8 additions & 0 deletions .idea/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 9 additions & 0 deletions .idea/fritzbox-cloudflare-dyndns.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions .idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit e978d98

Please sign in to comment.