first commit :)
Some checks failed
/ build-docker-image (push) Failing after 7s

This commit is contained in:
2025-10-05 00:25:00 +00:00
parent 4db2c4e285
commit 5a262c1eda
8 changed files with 266 additions and 1 deletions

109
.devcontainer/.zshrc Normal file
View File

@@ -0,0 +1,109 @@
# If you come from bash you might have to change your $PATH.
# export PATH=$HOME/bin:$HOME/.local/bin:/usr/local/bin:$PATH
# Path to your Oh My Zsh installation.
export ZSH="$HOME/.oh-my-zsh"
# Set name of the theme to load --- if set to "random", it will
# load a random theme each time Oh My Zsh is loaded, in which case,
# to know which specific one was loaded, run: echo $RANDOM_THEME
# See https://github.com/ohmyzsh/ohmyzsh/wiki/Themes
ZSH_THEME="gnzh"
# Set list of themes to pick from when loading at random
# Setting this variable when ZSH_THEME="devcontainers"
# a theme from this variable instead of looking in $ZSH/themes/
# If set to an empty array, this variable will have no effect.
# ZSH_THEME_RANDOM_CANDIDATES=( "robbyrussell" "agnoster" )
# Uncomment the following line to use case-sensitive completion.
# CASE_SENSITIVE="true"
# Uncomment the following line to use hyphen-insensitive completion.
# Case-sensitive completion must be off. _ and - will be interchangeable.
# HYPHEN_INSENSITIVE="true"
# Uncomment one of the following lines to change the auto-update behavior
# zstyle ':omz:update' mode disabled # disable automatic updates
# zstyle ':omz:update' mode auto # update automatically without asking
# zstyle ':omz:update' mode reminder # just remind me to update when it's time
# Uncomment the following line to change how often to auto-update (in days).
# zstyle ':omz:update' frequency 13
# Uncomment the following line if pasting URLs and other text is messed up.
# DISABLE_MAGIC_FUNCTIONS="true"
# Uncomment the following line to disable colors in ls.
# DISABLE_LS_COLORS="true"
# Uncomment the following line to disable auto-setting terminal title.
# DISABLE_AUTO_TITLE="true"
# Uncomment the following line to enable command auto-correction.
# ENABLE_CORRECTION="true"
# Uncomment the following line to display red dots whilst waiting for completion.
# You can also set it to another string to have that shown instead of the default red dots.
# e.g. COMPLETION_WAITING_DOTS="%F{yellow}waiting...%f"
# Caution: this setting can cause issues with multiline prompts in zsh < 5.7.1 (see #5765)
# COMPLETION_WAITING_DOTS="true"
# Uncomment the following line if you want to disable marking untracked files
# under VCS as dirty. This makes repository status check for large repositories
# much, much faster.
# DISABLE_UNTRACKED_FILES_DIRTY="true"
# Uncomment the following line if you want to change the command execution time
# stamp shown in the history command output.
# You can set one of the optional three formats:
# "mm/dd/yyyy"|"dd.mm.yyyy"|"yyyy-mm-dd"
# or set a custom format using the strftime function format specifications,
# see 'man strftime' for details.
# HIST_STAMPS="mm/dd/yyyy"
# Would you like to use another custom folder than $ZSH/custom?
# ZSH_CUSTOM=/path/to/new-custom-folder
# Which plugins would you like to load?
# Standard plugins can be found in $ZSH/plugins/
# Custom plugins may be added to $ZSH_CUSTOM/plugins/
# Example format: plugins=(rails git textmate ruby lighthouse)
# Add wisely, as too many plugins slow down shell startup.
plugins=(git timer web-search ssh kubectl helm colorize zsh-autosuggestions rclone ansible)
ZSH_COLORIZE_TOOL=chroma
source $ZSH/oh-my-zsh.sh
# User configuration
# export MANPATH="/usr/local/man:$MANPATH"
# You may need to manually set your language environment
# export LANG=en_US.UTF-8
# Preferred editor for local and remote sessions
# if [[ -n $SSH_CONNECTION ]]; then
# export EDITOR='vim'
# else
# export EDITOR='nvim'
# fi
# Compilation flags
# export ARCHFLAGS="-arch $(uname -m)"
# Set personal aliases, overriding those provided by Oh My Zsh libs,
# plugins, and themes. Aliases can be placed here, though Oh My Zsh
# users are encouraged to define aliases within a top-level file in
# the $ZSH_CUSTOM folder, with .zsh extension. Examples:
# - $ZSH_CUSTOM/aliases.zsh
# - $ZSH_CUSTOM/macos.zsh
# For a full list of active aliases, run `alias`.
#
# Example aliases
# alias zshconfig="mate ~/.zshrc"
# alias ohmyzsh="mate ~/.oh-my-zsh"
DISABLE_AUTO_UPDATE=true
DISABLE_UPDATE_PROMPT=true
export PATH=$PATH:/home/vscode/lib

View File

@@ -0,0 +1,37 @@
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
// README at: https://github.com/devcontainers/templates/tree/main/src/ubuntu
{
"name": "cloudflare-updateip-dev",
// Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
"image": "mcr.microsoft.com/devcontainers/base:jammy",
"features": {
"ghcr.io/devcontainers/features/docker-outside-of-docker": {},
},
// "features": {},
// Use 'forwardPorts' to make a list of ports inside the container available locally.
// "forwardPorts": [],
// Configure tool-specific properties.
// "customizations": {},
"mounts": [
"source=${localWorkspaceFolder}/.devcontainer/.zshrc,target=/home/vscode/.zshrc,type=bind",
"source=${localEnv:HOME}/.gitconfig,target=/home/vscode/.gitconfig,type=bind,consistency=cached",
"source=${localEnv:HOME}/.ssh,target=/home/vscode/.ssh,type=bind,consistency=cached"
],
"postCreateCommand": "bash .devcontainer/scripts/postCreate.sh",
"customizations": {
"vscode": {
"extensions": [
"stateful.runme",
"yzhang.markdown-all-in-one",
"davidanson.vscode-markdownlint",
"eamodio.gitlens",
"m4ns0ur.base64"
],
"settings": {
"terminal.integrated.defaultProfile.linux": "zsh"
}
}
}
}

View File

@@ -0,0 +1,5 @@
#setup chroma for zsh colorize
#chmod +x /home/vscode/lib/chroma

View File

@@ -0,0 +1,27 @@
on:
push
jobs:
build-docker-image:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Log in to git.limbosolutions.com docker registry
uses: docker/login-action@v3
with:
registry: git.limbosolutions.com
username: ${{ secrets.GITLIMBO_DOCKER_REGISTRY_USERNAME }}
password: ${{ secrets.GITLIMBO_DOCKER_REGISTRY_PASSWORD }}
- name: Build and push Docker images
id: push
uses: docker/build-push-action@v6
with:
context: ${{gitea.workspace}}
file: ${{gitea.workspace}}/Dockerfile
push: true
tags: git.limbosolutions.com/mylimbo/cloudflare-update-dns:latest

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
.env

12
DockerFile Normal file
View File

@@ -0,0 +1,12 @@
# Start from Alpine base image
FROM alpine:latest
# Install bash and curl
RUN apk update && apk add --no-cache curl bash
COPY src /app/scripts
RUN chmod +x /app/scripts -R
ENV LOOP=60
# Set bash as the default shell
CMD ["/bin/sh","-c", "/app/scripts/update-ip.sh"]

View File

@@ -1,2 +1,24 @@
# cloudflare-updatedns
# cloudflare-updateip
## run
``` bash
# requires .env file check script for required variables
docker run --name mylimbo-cloudflare-updatedns --env-file ./.env git.limbosolutions.com/mylimbo/cloudflare-updatedns:latest
```
## execute direcly without docker
```bash
# requires .env file check script for required variables
set -a
source .env
set +a
bash -c ./src/update-ip.sh
```
## build local image
``` bash
docker build -f DockerFile -t git.limbosolutions.com/mylimbo/cloudflare-updatedns:latest .
```

52
src/update-ip.sh Executable file
View File

@@ -0,0 +1,52 @@
#!/bin/bash
# environments variables:
# CLOUDFLARE_API_TOKEN=CLoudflare api token
# CLOUDFLARE_ZONE_ID=cloudflare zone id
# CLOUDFLARE_RECORD_ID=cloudflare zone id
# SLEEP=60s
# script source: https://medium.com/@adrian.punga_29809/dynamic-dns-with-cloudflare-761c1efcd84
LAST_IP=""
MY_IP=""
: "${CLOUDFLARE_API_TOKEN:?Environment variable CLOUDFLARE_API_TOKEN is not set}"
: "${CLOUDFLARE_ZONE_ID:?Environment variable CLOUDFLARE_ZONE_ID is not set}"
: "${CLOUDFLARE_RECORD_ID:?Environment variable CLOUDFLARE_RECORD_ID is not set}"
updateCloudFlare() {
#echo "curl -X PATCH \"https://api.cloudflare.com/client/v4/zones/${CLOUDFLARE_ZONE_ID}/dns_records/${CLOUDFLARE_RECORD_ID}\""
#echo "--data \"{\"content\":\"${MY_IP}\"}\""
#echo "Authorization: Bearer ${CLOUDFLARE_API_TOKEN}"
#--silent
curl --silent -X PATCH "https://api.cloudflare.com/client/v4/zones/${CLOUDFLARE_ZONE_ID}/dns_records/${CLOUDFLARE_RECORD_ID}" \
-H "Authorization: Bearer ${CLOUDFLARE_API_TOKEN}" \
-H "Content-Type: application/json" \
--data "{\"content\":\"${MY_IP}\"}" ; echo #to end the line on output
}
checkIp() {
MY_IP="$(curl --silent ifconfig.me)"
if [ "${MY_IP}" != "${LAST_IP}" ]; then
echo "info: Public IP changed. From ${LAST_IP} to ${MY_IP}".
updateCloudFlare
LAST_IP=${MY_IP}
else
echo "info: Public IP ${LAST_IP} remained the same."
fi
}
if [ -n "${SLEEP}" ]; then
while :
do
checkIp
sleep ${SLEEP}
done
else
checkIp
fi