diff --git a/.gitea/workflows/publish-image.yaml b/.gitea/workflows/publish-image.yaml new file mode 100644 index 0000000..062e97e --- /dev/null +++ b/.gitea/workflows/publish-image.yaml @@ -0,0 +1,60 @@ +name: Docker Image CI + +on: + # schedule: + # - cron: "0 10 * * *" + push: + branches: + - "**" + tags: + - "v*.*.*" + pull_request: + +jobs: + docker: + runs-on: ubuntu-latest + steps: + - name: Docker meta + id: meta + uses: docker/metadata-action@v5 + with: + # list of Docker images to use as base name for tags + images: | + anaxios/holesail + # generate Docker tags based on the following events/attributes + tags: | + type=schedule + type=ref,event=branch + type=ref,event=pr + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=semver,pattern={{major}} + type=sha + + - name: Login to Docker Hub + if: github.event_name != 'pull_request' + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + + # - name: Login to GHCR + # if: github.event_name != 'pull_request' + # uses: docker/login-action@v3 + # with: + # registry: ghcr.io + # username: ${{ github.repository_owner }} + # password: ${{ secrets.GITHUB_TOKEN }} + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Build and push + uses: docker/build-push-action@v6 + with: + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index c4be5e6..2aebbd8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,10 +1,11 @@ FROM node:lts-slim AS base -WORKDIR /temp +WORKDIR / COPY run.sh . +COPY fetch-my-mc-connector.js . RUN chmod +x run.sh -RUN npm install -g holesail@1.10.1 +RUN npm install -g holesail@2.0.3 ENV MODE server ENV HOST 0.0.0.0 @@ -16,8 +17,4 @@ ENV ROLE user ENV CONNECTOR "" ENV FORCE "" -#EXPOSE 8989 - -WORKDIR /data - -ENTRYPOINT [ "/temp/run.sh" ] +ENTRYPOINT [ "/run.sh" ] diff --git a/fetch-my-mc-connector.js b/fetch-my-mc-connector.js new file mode 100644 index 0000000..c23446e --- /dev/null +++ b/fetch-my-mc-connector.js @@ -0,0 +1,13 @@ +const apiKey = process.env.CONNECTOR; + +const result = fetch('https://api.my-mc.link/my-hash',{ + method: "GET", + headers: { + 'Accept': 'application/json', 'Content-Type': 'application/json', 'x-my-mc-auth': apiKey} + }) + .then(async response => { + const r = await response.json(); + if (r.success == true) { + console.log(r.message); + } + }) diff --git a/run.sh b/run.sh index 2f7f897..60458f3 100644 --- a/run.sh +++ b/run.sh @@ -1,5 +1,9 @@ #!/bin/bash +#set -x + +pid=0 + CYAN="\033[1;96m" RED="\033[0;91m" GREEN="\033[0;92m" @@ -21,6 +25,10 @@ success() { print "$GREEN" "$1" } +get_connector_my-mc() { + printf "$(node /fetch-my-mc-connector.js)" +} + cmd_argument_builder () { local args=""; case "$MODE" in @@ -47,12 +55,16 @@ cmd_argument_builder () { [[ "$ROLE" = "user" ]] && args="$args --role user"; [[ "$CONNECTOR" ]] && args="$args --connector $CONNECTOR"; ;; + "my-mc") + [[ "$PORT" ]] && args="$args --port $PORT"; + [[ "$HOST" ]] && args="$args --host $HOST"; + [[ "$CONNECTOR" ]] && args="$args $(get_connector_my-mc)"; + ;; esac printf "%s" "$args"; } - ARGS="$(cmd_argument_builder)" if [[ ! $ARGS ]]; then @@ -60,5 +72,30 @@ if [[ ! $ARGS ]]; then exit 1 fi -holesail $ARGS +# SIGUSR1-handler +# my_handler() { +# echo "my_handler" +# } +term_handler() { + if [ $pid -ne 0 ]; then + kill -SIGTERM "$pid" + wait "$pid" + fi + exit 143; # 128 + 15 -- SIGTERM +} + +# setup handlers +# on callback, kill the last background process, which is `tail -f /dev/null` and execute the specified handler +#trap 'kill ${!}; my_handler' SIGUSR1 +trap 'kill ${!}; term_handler' SIGTERM + +# run application +holesail $ARGS & +pid="$!" + +# wait forever +while true +do + tail -f /dev/null & wait ${!} +done