diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..86d5f54 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,9 @@ +version: 2 +updates: + - package-ecosystem: "docker" + directory: "tools/docker" + schedule: + interval: "monthly" + commit-message: + prefix: "deps" + include: "scope" diff --git a/.github/workflows/image-build.yml b/.github/workflows/image-build.yml new file mode 100644 index 0000000..672916a --- /dev/null +++ b/.github/workflows/image-build.yml @@ -0,0 +1,30 @@ +name: Build and push docker image + +on: + push: + branches: + - main + paths: + - tools/docker/Dockerfile + workflow_dispatch: + +jobs: + build-push: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Docker hub login + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Build and push + uses: docker/build-push-action@v6 + with: + context: tools/docker + push: true + tags: ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKERHUB_REPOSITORY }}:latest diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..0b1e95f --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,28 @@ +name: Release + +on: + push: + tags: + - v* + +permissions: + contents: write + +jobs: + release: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Create release + id: create_release + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ github.ref_name }} + release_name: ${{ github.ref_name }} + draft: false + prerelease: false diff --git a/action.yml b/action.yml new file mode 100644 index 0000000..97e8888 --- /dev/null +++ b/action.yml @@ -0,0 +1,77 @@ +name: Build and send diploma thesis +description: GitHub action to build and send a diploma thesis using the corresponding docker image from school HTL Leoben +author: bitsneak +branding: + icon: mail + color: yellow + +inputs: + thesis-path: + description: The path to the filled out diploma thesis folder. If not set it will default to Diplomarbeit + default: Diplomarbeit + required: false + smtp-server: + description: The smtp server of your sending email + required: true + smtp-port: + description: The smtp server port of your sending emai' + required: true + mail-address: + description: The sending email address + required: true + mail-address-password: + description: The password for the sending email address + required: true + teams-mail: + description: The email address of the teams channel the diploma thesis is sent to + required: true + +runs: + using: composite + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Cache Docker image + id: cache-docker + uses: actions/cache@v4 + with: + path: /tmp/.docker + key: ${{ runner.os }}-docker-${{ hashFiles('**/HTLLE-DA-Vorlage/tools/docker/Dockerfile') }} + restore-keys: | + ${{ runner.os }}-docker- + + - name: Create Docker cache directory + if: steps.cache-docker.outputs.cache-hit != 'true' + shell: bash + run: mkdir -p /tmp/.docker + + - name: Load cached Docker image + if: steps.cache-docker.outputs.cache-hit == 'true' + shell: bash + run: docker load -i /tmp/.docker/image.tar + + - name: Pull Docker image + if: steps.cache-docker.outputs.cache-hit != 'true' + shell: bash + run: | + docker pull ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKERHUB_REPOSITORY }} + docker save ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKERHUB_REPOSITORY }} -o /tmp/.docker/image.tar + + - name: Build diploma thesis + shell: bash + run: docker run -v ${{ github.workspace }}/${{ inputs.thesis-path }}:/workspace ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKERHUB_REPOSITORY }} + + - name: Send diploma thesis + uses: dawidd6/action-send-mail@v4 + with: + server_address: ${{ inputs.smtp-server }} + server_port: ${{ inputs.smtp-port }} + username: ${{ inputs.mail-address }} + password: ${{ inputs.mail-address-password }} + subject: "Diploma thesis" + body: " " + to: ${{ inputs.teams-mail }} + from: ${{ inputs.mail-address }} + attachments: ${{ inputs.thesis-path }}/diplomarbeit.pdf diff --git a/tools/README.md b/tools/README.md index 48b6168..ae20f55 100644 --- a/tools/README.md +++ b/tools/README.md @@ -1,3 +1,7 @@ # docker tools -The provided Dockerfile allows one to create a docker container taht builds the diploma thesis. +The provided Dockerfile allows one to create a docker container that builds the diploma thesis. + +# github tools + +The provided GitHub action allow one to build the diploma thesis in an automated workflow. diff --git a/tools/github/README.md b/tools/github/README.md index a9d1922..4816f49 100644 --- a/tools/github/README.md +++ b/tools/github/README.md @@ -1,4 +1,84 @@ -# Github tools +# GitHub actions -The workflow `build-and-send.yaml` allows the user to build the diploma thesis via a github workflow. -Adapt it to meet your needs. +The workflow `Build and send diploma thesis` allows the user to build the diploma thesis via a github workflow and send it to a Microsoft Teams channel. + +## Create GitHub secrets + +In your GitHub repository you first need to create the secrets the action needs. For that, go to the `Settings` Tab of your repository and under the section `Security` go to `Secrets and variables` and choose to the option `Actions`. + +![Github repository settings](img/github-repo-settings.png) + +Now click on the button `New repository secret` to create the GitHub action secrets. + +![Github secret creation](img/github-action-secret-creation.png) + +Here you enter the names of the secrets and their values corresponding to the following table. After inserting the contents of the new secret click `Add secret`. + +| Name | Secret | +|-|-| +| MAIL | Your email address from which the diploma thesis should be sent from | +| MAIL_PASSWORD | The password for MAIL | +| SMTP_PORT | The SMTP port corresponding to SMTP_SERVER | +| SMTP_SERVER | The SMTP Server for your email address | +| TEAMS_MAIL | The Teams channel email from the channel the diploma thesis should be sent to | + +Now it should look like this: + +![Github action secret overview](img/github-action-secret-overview.png) + +## Setup with published action + +In the repo that should use this workflow create a file `.github/workflows/thesis.yml` and paste following contents into it. Do not forget to create the secrets. + +```yml +name: Build and send diploma thesis + +on: + push: + workflow_dispatch: + +jobs: + build-and-send: + runs-on: ubuntu-latest + + steps: + - name: Build and send diploma thesis + uses: bitsneak/TestingDABuild@v0.1.3 + with: + # if the folder where the template is filled out has a different name than 'Diplomarbeit' + #thesis-path: folder_name + + smtp-server: ${{ secrets.SMTP_SERVER }} + smtp-port: ${{ secrets.SMTP_PORT }} + mail-address: ${{ secrets.MAIL }} # do not use school email address + mail-address-password: ${{ secrets.MAIL_PASSWORD }} # when using gmail an app password must be used + teams-mail: ${{ secrets.TEAMS_MAIL }} +``` + +## Setup without published action + +### Microsoft Teams + +1. Create a new channel in your Team named `build`. +2. Go to the channel settings of `build` and go to `Get email address`. + +![Github Headbar](img/teams-channel-settings.png) + +3. Copy the email address which is inside of the sharp brackets. + +### GitHub + +Create a folder `.github/workflows` in the root of your repository. You can now choose between `diploma-thesis-docker.yml` and `diploma-thesis-manual.yml` to paste into the newly created folder. The difference between them is, that the **-docker** uses the Docker image (for new diploma theses) and the **-manual** installs all the dependencies in the action itself (for old diploma theses). + +### Notes + +- Sending the diploma thesis, and therefore automated emails, using a school email address is not supported. Therefore use an email address that does not correspond to your school email address. +- If you use Gmail as a sending email address, you have to generate an app password and use this instead of your normal password. [Manual](https://knowledge.workspace.google.com/kb/how-to-create-app-passwords-000009237) + +## Credentials + +- ducumentation + - Schrempf Marko +- code + - Schrempf Marko + - Kampl Maximilian diff --git a/tools/github/build-and-send.yaml b/tools/github/build-and-send.yaml deleted file mode 100644 index fd207b5..0000000 --- a/tools/github/build-and-send.yaml +++ /dev/null @@ -1,41 +0,0 @@ -name: Build and Send Diplomathesis - -on: - push: - branches: - - main - paths: - - Diplomarbeit/** - -jobs: - build: - runs-on: ubuntu-latest - - steps: - - name: Checkout code - uses: actions/checkout@v2 - - - - name: Install dependencies - run: | - sudo apt-get update - sudo apt-get install git build-essential make-guile texlive-full pandoc pandoc-citeproc tree rsync hunspell hunspell-de-at - - - - name: Build DA-Thesis - run: | - make pdf -C HTLLE-DA-Vorlage SOURCEDIR=../Diplomarbeit/ - - - - name: Send File via Email - uses: dawidd6/action-send-mail@v2 - with: - server_address: smtp.gmail.com - server_port: 587 - username: ${{ secrets.GMAIL_MAIL }} - password: ${{ secrets.GMAIL_APP_PASSWORD }} - subject: "Diploma thesis" - body: " " - to: ${{ secrets.TEAMS_MAIL }} - from: ${{ secrets.GMAIL_MAIL }} - attachments: Diplomarbeit/diplomarbeit.pdf diff --git a/tools/github/diploma-thesis-docker.yml b/tools/github/diploma-thesis-docker.yml new file mode 100644 index 0000000..9c2992c --- /dev/null +++ b/tools/github/diploma-thesis-docker.yml @@ -0,0 +1,56 @@ +name: Build and send diploma thesis + +on: + push: + branches: + - main + paths: + - Diplomarbeit/** + workflow_dispatch: + +jobs: + build-send:: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Cache Docker image + id: cache-docker + uses: actions/cache@v4 + with: + path: /tmp/.docker + key: ${{ runner.os }}-docker-${{ hashFiles('**/HTLLE-DA-Vorlage/tools/docker/Dockerfile') }} + restore-keys: | + ${{ runner.os }}-docker- + + - name: Create Docker cache directory + if: steps.cache-docker.outputs.cache-hit != 'true' + run: mkdir -p /tmp/.docker + + - name: Load cached Docker image + if: steps.cache-docker.outputs.cache-hit == 'true' + run: docker load -i /tmp/.docker/image.tar + + - name: Pull Docker image + if: steps.cache-docker.outputs.cache-hit != 'true' + run: | + docker pull bytebang/htlle-da-env + docker save bytebang/htlle-da-env -o /tmp/.docker/image.tar + + - name: Build diploma thesis + run: docker run -v ${{ github.workspace }}/Diplomarbeit:/workspace bytebang/htlle-da-env + + - name: Send diploma thesis + uses: dawidd6/action-send-mail@v4 + with: + server_address: ${{ secrets.SMTP_SERVER }} + server_port: ${{ secrets.SMTP_PORT }} + username: ${{ secrets.MAIL }} + password: ${{ secrets.MAIL_PASSWORD }} + subject: "Diploma thesis" + body: " " + to: ${{ secrets.TEAMS_MAIL }} + from: ${{ secrets.MAIL }} + attachments: Diplomarbeit/diplomarbeit.pdf diff --git a/tools/github/diploma-thesis-manual.yml b/tools/github/diploma-thesis-manual.yml new file mode 100644 index 0000000..324f8c5 --- /dev/null +++ b/tools/github/diploma-thesis-manual.yml @@ -0,0 +1,39 @@ +name: Build and send diploma thesis + +on: + push: + branches: + - main + paths: + - Diplomarbeit/** + workflow_dispatch: + +jobs: + build-send:: + runs-on: ubuntu-22.04 + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get install -y --no-install-recommends git build-essential make-guile texlive-full pandoc pandoc-citeproc tree rsync hunspell hunspell-de-at hunspell-en-us + + - name: Build diploma thesis + run: | + make pdf -C HTLLE-DA-Vorlage SOURCEDIR=../Diplomarbeit/ + + - name: Send diploma thesis + uses: dawidd6/action-send-mail@v4 + with: + server_address: ${{ secrets.SMTP_SERVER }} + server_port: ${{ secrets.SMTP_PORT }} + username: ${{ secrets.MAIL }} + password: ${{ secrets.MAIL_PASSWORD }} + subject: "Diploma thesis" + body: " " + to: ${{ secrets.TEAMS_MAIL }} + from: ${{ secrets.MAIL }} + attachments: Diplomarbeit/diplomarbeit.pdf diff --git a/tools/github/img/github-action-secret-creation.png b/tools/github/img/github-action-secret-creation.png new file mode 100644 index 0000000..dc7ce17 Binary files /dev/null and b/tools/github/img/github-action-secret-creation.png differ diff --git a/tools/github/img/github-action-secret-overview.png b/tools/github/img/github-action-secret-overview.png new file mode 100644 index 0000000..e8eadcf Binary files /dev/null and b/tools/github/img/github-action-secret-overview.png differ diff --git a/tools/github/img/github-repo-settings.png b/tools/github/img/github-repo-settings.png new file mode 100644 index 0000000..b3d919a Binary files /dev/null and b/tools/github/img/github-repo-settings.png differ diff --git a/tools/github/img/teams-channel-settings.png b/tools/github/img/teams-channel-settings.png new file mode 100644 index 0000000..ca948bf Binary files /dev/null and b/tools/github/img/teams-channel-settings.png differ