diff --git a/.gitea/scripts/update_dockerhub_api b/.gitea/scripts/update_dockerhub_api new file mode 100755 index 0000000..d6d6245 --- /dev/null +++ b/.gitea/scripts/update_dockerhub_api @@ -0,0 +1,25 @@ +#!/bin/bash + +DOCKERHUB_USERNAME="${1}" +DOCKERHUB_PASSWORD="${2}" +GITEA_OWNER_REPO="${3}" +GITEA_API_KEY="${4}" +gitea_username=$(echo "${GITEA_OWNER_REPO}" | sed 's/\/.*//') +repo_name=$(echo "${GITEA_OWNER_REPO}" | sed 's/^.*\///') + +NEW_DOCKERHUB_TOKEN=$(curl -s -X POST "https://hub.docker.com/v2/auth/token" \ + -H "Content-Type: application/json" \ + -d "{\"identifier\": \"${DOCKERHUB_USERNAME}\", \"secret\": \"${DOCKERHUB_PASSWORD}\"}" \ + | jq -r .access_token) + +curl -X 'PUT' \ + "https://gitea.happylizard.me/api/v1/repos/${gitea_username}/${repo_name}/actions/secrets/DOCKERHUB_TOKEN" \ + -H 'accept: application/json' \ + -H "Authorization: token ${GITEA_API_KEY}" \ + -H 'Content-Type: application/json' \ + -d "{ + \"data\": \"${NEW_DOCKERHUB_TOKEN}\", + \"description\": \"\" +}" + + diff --git a/.gitea/workflows/docker_build.yml b/.gitea/workflows/docker_build.yml new file mode 100644 index 0000000..5360e45 --- /dev/null +++ b/.gitea/workflows/docker_build.yml @@ -0,0 +1,53 @@ +name: Build and Push Docker Image + +on: + push: + branches: + - docker_upload + +jobs: + docker: + runs-on: ubuntu-latest + + steps: + - id: get-repo-name + name: Grab formatted repo name + run: | + repository_name=$(echo ${{ gitea.repository }} | sed 's/^.*\///') + dockerhub_repo_name=$(echo ${repository_name} | tr '[:upper:]' '[:lower:]') + echo "repository-name=$repository_name" >> "$GITEA_OUTPUT" + echo "dockerhub-repo-name=$dockerhub_repo_name" >> "$GITEA_OUTPUT" + - name: Print repo name (for testing) + run: | + echo "Repository name: ${{ steps.get-repo-name.outputs.repository-name }}" + echo "Dockerhub formatted repo name: ${{ steps.get-repo-name.outputs.dockerhub-repo-name }}" + + - name: Checkout repository + uses: actions/checkout@v4 + + - run: | + ./bin/update_dockerhub_api \ + ${{ secrets.DOCKERHUB_USERNAME }} \ + ${{ secrets.DOCKERHUB_PASSWORD }} \ + ${{ gitea.repository }} \ + ${{ secrets.API_KEY }} + + - name: Log in to Docker Hub + uses: docker/login-action@v3 + with: + registry: docker.io + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Build and push Docker image + uses: docker/build-push-action@v6 + with: + context: . + push: true + tags: | + docker.io/${{ secrets.DOCKERHUB_USERNAME }}/${{ steps.get-repo-name.outputs.dockerhub-repo-name }}:latest + docker.io/${{ secrets.DOCKERHUB_USERNAME }}/${{ steps.get-repo-name.outputs.dockerhub-repo-name }}:${{ gitea.sha }} + diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..80c59c0 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,19 @@ +FROM python:3-alpine3.15 +WORKDIR /app + +# Install the application dependencies +# COPY . ./ +COPY happy_ripper.py ./ +COPY requirements.txt ./ +COPY templates ./templates + +RUN pip install --no-cache-dir -r requirements.txt +RUN apk add --no-cache ffmpeg + +EXPOSE 5000 + +## Setup an app user so the container doesn't run as the root user +#RUN useradd app +#USER app + +CMD ["python3", "./happy_ripper.py"] diff --git a/bin/manually_get_dockerhub_token b/bin/manually_get_dockerhub_token new file mode 100755 index 0000000..0a03776 --- /dev/null +++ b/bin/manually_get_dockerhub_token @@ -0,0 +1,10 @@ +#!/bin/bash +# Will return your dockerhub token (tokens may be temporary) + +read -p "Dockerhub username: " DOCKERHUB_USERNAME +read -p "Dockerhub PASSWORD: " DOCKERHUB_PASSWORD + +curl -s -X POST "https://hub.docker.com/v2/auth/token" \ + -H "Content-Type: application/json" \ + -d "{\"identifier\": \"${DOCKERHUB_USERNAME}\", \"secret\": \"${DOCKERHUB_PASSWORD}\"}" \ + | jq -r .access_token diff --git a/bin/readme.md b/bin/readme.md new file mode 100644 index 0000000..ff8f00f --- /dev/null +++ b/bin/readme.md @@ -0,0 +1 @@ +These are mainly only needed for managing the git repository, not to be used with happy-ripper diff --git a/bin/update_dockerhub_api b/bin/update_dockerhub_api new file mode 100755 index 0000000..2a5e263 --- /dev/null +++ b/bin/update_dockerhub_api @@ -0,0 +1,30 @@ +#!/bin/bash + +if [[ -z "${1}" ]]; then + echo "This is for the gitea actions only, as it requires the repository's secrets to pass the needed variables" + exit 1 +fi + +DOCKERHUB_USERNAME="${1}" +DOCKERHUB_PASSWORD="${2}" +GITEA_OWNER_REPO="${3}" +GITEA_API_KEY="${4}" +gitea_username=$(echo "${GITEA_OWNER_REPO}" | sed 's/\/.*//') +repo_name=$(echo "${GITEA_OWNER_REPO}" | sed 's/^.*\///') + +NEW_DOCKERHUB_TOKEN=$(curl -s -X POST "https://hub.docker.com/v2/auth/token" \ + -H "Content-Type: application/json" \ + -d "{\"identifier\": \"${DOCKERHUB_USERNAME}\", \"secret\": \"${DOCKERHUB_PASSWORD}\"}" \ + | jq -r .access_token) + +curl -X 'PUT' \ + "https://gitea.happylizard.me/api/v1/repos/${gitea_username}/${repo_name}/actions/secrets/DOCKERHUB_TOKEN" \ + -H 'accept: application/json' \ + -H "Authorization: token ${GITEA_API_KEY}" \ + -H 'Content-Type: application/json' \ + -d "{ + \"data\": \"${NEW_DOCKERHUB_TOKEN}\", + \"description\": \"\" +}" + + diff --git a/requirements.txt b/requirements.txt index abe6be9..254829f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ Flask==3.1.3 mutagen==1.47.0 yt_dlp==2026.8.19 +ytmusicapi==1.12.3