diff --git a/IUM_11.CML.ipynb b/IUM_11.CML.ipynb index cd789cd..0d7595b 100644 --- a/IUM_11.CML.ipynb +++ b/IUM_11.CML.ipynb @@ -12,8 +12,8 @@ "![Logo 1](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech1.jpg)\n", "
\n", "

Inżynieria uczenia maszynowego

\n", - "

11. Github actions i CML [laboratoria]

\n", - "

Tomasz Ziętkiewicz (2022)

\n", + "

11. Github actions [laboratoria]

\n", + "

Tomasz Ziętkiewicz (2023)

\n", "
\n", "\n", "![Logo 2](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech2.jpg)" @@ -70,8 +70,8 @@ "source": [ "### Terminologia Github Actions\n", " - *Workflow* - workflow odpowiada \"Pipeline\" z Jenkinsa.\n", - " - *Event* - zdażenie, które odapala (\"triggers\") uruchomienie \"Workflow\". Np. wypchnięcie zmiany do repozytorium (\"push\"), utworzenie Pull requesta. [Pełna lista](https://docs.github.com/en/actions/reference/events-that-trigger-workflows)\n", - " - *Job* - workflow składa się z jednego lub kilku \"jobs\". Każdy z nich może być wykonywany równolegle na innej maszynie (patrz \"runner\")\n", + " - *Event* - zdarzenie, które odapala (\"triggers\") \"Workflow\". Np. wypchnięcie zmiany do repozytorium (\"push\"), utworzenie Pull requesta. [Pełna lista](https://docs.github.com/en/actions/reference/events-that-trigger-workflows)\n", + " - *Job* - workflow składa się z jednego lub kilku zadań (\"jobs\"). Każde z nich może być wykonywane równolegle na innej maszynie (patrz \"runner\")\n", " - *Step* - odpowiednik \"Stage\" z Jenkinsa - służu do grupowania \"Actions\"\n", " - *Action/command* - odpowiednik \"Step\" z Jenkinsa - pojedyncze polecenie do wykonania, np. dodanie komentarze do Pull requesta, wykonanie polecenia systemowego itp.\n", " - *Runner* - odpowiednik Jenkinsowego \"Agent\" - serwer, na którym mogą być wykonywane zadania (\"jobs\")\n", @@ -103,33 +103,7 @@ }, { "cell_type": "code", - "execution_count": 1, - "id": "955585a9", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "/home/tomek/AITech/repo/aitech-ium-private/IUM_11\n", - "Initialized empty Git repository in /home/tomek/AITech/repo/aitech-ium-private/IUM_11/github-actions-hello/.git/\r\n" - ] - } - ], - "source": [ - "%cd IUM_11\n", - "!mkdir github-actions-hello;\\\n", - "cd github-actions-hello;\\\n", - "git init" - ] - }, - { - "cell_type": "code", - "execution_count": 5, + "execution_count": 16, "id": "f4916c1f", "metadata": { "slideshow": { @@ -141,18 +115,49 @@ "name": "stdout", "output_type": "stream", "text": [ - "/home/tomek/AITech/repo/aitech-ium-private/IUM_11/github-actions-hello\n" + "/home/tomek/repos/aitech-ium/IUM_11/github-actions-hello\n" ] } ], "source": [ - "%cd github-actions-hello\n", + "!mkdir -p IUM_11/github-actions-hello\n", + "%cd IUM_11/github-actions-hello\n", "!mkdir -p .github/workflows" ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 19, + "id": "33abf69d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Reinitialized existing Git repository in /home/tomek/repos/aitech-ium/IUM_11/github-actions-hello/.git/\n", + "Enumerating objects: 6, done.\n", + "Counting objects: 100% (6/6), done.\n", + "Delta compression using up to 4 threads\n", + "Compressing objects: 100% (4/4), done.\n", + "Writing objects: 100% (6/6), 780 bytes | 780.00 KiB/s, done.\n", + "Total 6 (delta 0), reused 0 (delta 0), pack-reused 0\n", + "To github.com:TomekZet/ium-ga-hello.git\n", + " * [new branch] main -> main\n", + "Branch 'main' set up to track remote branch 'main' from 'origin'.\n" + ] + } + ], + "source": [ + "!git init\n", + "!git branch -M main\n", + "!git remote add origin git@github.com:TomekZet/ium-ga-hello.git\n", + "!git push -u origin main" + ] + }, + { + "cell_type": "code", + "execution_count": 20, "id": "dde8d432", "metadata": { "slideshow": { @@ -164,7 +169,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Writing .github/workflows/workflow.yml\n" + "Overwriting .github/workflows/workflow.yml\n" ] } ], @@ -185,6 +190,144 @@ " - run: python3 --version" ] }, + { + "cell_type": "code", + "execution_count": 22, + "id": "780f41d6", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "On branch main\n", + "Your branch is up to date with 'origin/main'.\n", + "\n", + "nothing to commit, working tree clean\n", + "Everything up-to-date\n" + ] + } + ], + "source": [ + "!git add .github/workflows/workflow.yml\n", + "!git commit -m \"Github Actions Workflow\"\n", + "!git push" + ] + }, + { + "cell_type": "markdown", + "id": "b56a1b02", + "metadata": {}, + "source": [ + "### Zakładka actions na stronie repozytorium:\n", + "https://github.com/TomekZet/ium-ga-hello/actions" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "e3be3eb3", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "total 16\r\n", + "drwxr-sr-x 2 tomek tomek 4096 May 17 11:51 .\r\n", + "drwxr-sr-x 3 tomek tomek 4096 May 17 11:51 ..\r\n", + "-rw-r--r-- 1 tomek tomek 456 May 17 11:51 parametrized.yml\r\n", + "-rw-r--r-- 1 tomek tomek 305 May 17 12:01 workflow.yml\r\n" + ] + } + ], + "source": [ + "!ls -al .github/workflows" + ] + }, + { + "cell_type": "markdown", + "id": "b40a7f62", + "metadata": {}, + "source": [ + "### Ręczne wywoływanie\n", + "Workflow można również wywołać ręcznie, podając parametry.\n", + "Więcej informacji np. tutaj: https://github.blog/changelog/2020-07-06-github-actions-manual-triggers-with-workflow_dispatch/" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "id": "132d8d16", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Overwriting .github/workflows/parametrized.yml\n" + ] + } + ], + "source": [ + "%%writefile .github/workflows/parametrized.yml\n", + "name: github-actions-hello-parametrized\n", + "on: \n", + " workflow_dispatch:\n", + " inputs:\n", + " input_text:\n", + " description: 'Text to display' \n", + " required: true\n", + " default: 'Hello World'\n", + "jobs:\n", + " hello-job:\n", + " runs-on: ubuntu-latest\n", + " steps:\n", + " - name: Checkout repo\n", + " uses: actions/checkout@v2\n", + " - name: Install dependencies\n", + " run:\n", + " sudo apt update;\n", + " sudo apt install -y figlet\n", + " - name: Write\n", + " run:\n", + " figlet \"${{ github.event.inputs.input_text }}\"" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "id": "c4e71172", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[main a98938d] just dispatch\n", + " 1 file changed, 6 deletions(-)\n", + "Enumerating objects: 9, done.\n", + "Counting objects: 100% (9/9), done.\n", + "Delta compression using up to 4 threads\n", + "Compressing objects: 100% (3/3), done.\n", + "Writing objects: 100% (5/5), 411 bytes | 411.00 KiB/s, done.\n", + "Total 5 (delta 1), reused 0 (delta 0), pack-reused 0\n", + "remote: Resolving deltas: 100% (1/1), completed with 1 local object.\u001b[K\n", + "To github.com:TomekZet/ium-ga-hello.git\n", + " 6c4a361..a98938d main -> main\n" + ] + } + ], + "source": [ + "!git add -u .github/workflows\n", + "!git commit -m \"just dispatch\"\n", + "!git push" + ] + }, { "cell_type": "markdown", "id": "ed780dea", @@ -219,6 +362,194 @@ " - z [Github Marketplace](https://github.com/marketplace?type=actions)" ] }, + { + "cell_type": "markdown", + "id": "a0628b12", + "metadata": {}, + "source": [ + "### Akcje wykonywane w kontenerze Docker\n", + "Akcja może być wywołana w kontenerze Docker (pobranym z Docker hub albo zbudowanym z Dockerfile)\n", + "W tym celu należy stworzyć własną akcję w pliku action.yaml i potem użyć jej w Workflow" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "id": "b8222161", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Overwriting action.yml\n" + ] + } + ], + "source": [ + "%%writefile action.yml\n", + "name: 'Hello World'\n", + "description: 'Greet someone and record the time'\n", + "inputs:\n", + " who-to-greet: # id of input\n", + " description: 'Who to greet'\n", + " required: true\n", + " default: 'World'\n", + "outputs:\n", + " time: # id of output\n", + " description: 'The time we greeted you'\n", + "runs:\n", + " using: 'docker'\n", + " image: 'Dockerfile'\n", + " args:\n", + " - ${{ inputs.who-to-greet }}" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "id": "80883b9e", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Overwriting Dockerfile\n" + ] + } + ], + "source": [ + "%%writefile Dockerfile\n", + "# Container image that runs your code\n", + "FROM ubuntu:latest\n", + " \n", + "RUN apt update && apt install -y figlet\n", + "\n", + "# Copies your code file from your action repository to the filesystem path `/` of the container\n", + "COPY entrypoint.sh /entrypoint.sh\n", + "\n", + "# Code file to execute when the docker container starts up (`entrypoint.sh`)\n", + "ENTRYPOINT [\"/entrypoint.sh\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "id": "f98fee9a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Writing entrypoint.sh\n" + ] + } + ], + "source": [ + "%%writefile entrypoint.sh\n", + "#!/bin/sh -l\n", + "\n", + "figlet \"Hello $1\"\n", + "time=$(date)\n", + "echo \"time=$time\" >> $GITHUB_OUTPUT" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "id": "352de060", + "metadata": {}, + "outputs": [], + "source": [ + "!chmod +x entrypoint.sh" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "id": "d73fb6c4", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Overwriting .github/workflows/docker.yml\n" + ] + } + ], + "source": [ + "%%writefile .github/workflows/docker.yml\n", + "name: github-actions-hello-docker\n", + "on: \n", + " workflow_dispatch:\n", + " inputs:\n", + " input_text:\n", + " description: 'Who to greet' \n", + " required: true\n", + " default: 'World'\n", + "jobs:\n", + " hello-job:\n", + " runs-on: ubuntu-latest\n", + " steps:\n", + " - name: Checkout repo\n", + " uses: actions/checkout@v2\n", + " - name: Use docker action\n", + " uses: ./\n", + " with:\n", + " who-to-greet: \"${{ github.event.inputs.input_text }}\"\n", + " # Use the output from the `hello` step\n", + " - name: Get the output time\n", + " run: echo \"The time was ${{ steps.hello.outputs.time }}\"\n", + " \n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "id": "94d8eec0", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[main 97c7272] Fix path\n", + " 1 file changed, 0 insertions(+), 0 deletions(-)\n", + " mode change 100644 => 100755 entrypoint.sh\n", + "Enumerating objects: 3, done.\n", + "Counting objects: 100% (3/3), done.\n", + "Delta compression using up to 4 threads\n", + "Compressing objects: 100% (2/2), done.\n", + "Writing objects: 100% (2/2), 232 bytes | 232.00 KiB/s, done.\n", + "Total 2 (delta 1), reused 0 (delta 0), pack-reused 0\n", + "remote: Resolving deltas: 100% (1/1), completed with 1 local object.\u001b[K\n", + "To github.com:TomekZet/ium-ga-hello.git\n", + " 0f9de38..97c7272 main -> main\n" + ] + } + ], + "source": [ + "!git add .github entrypoint.sh Dockerfile\n", + "!git commit -m \"Fix path\"\n", + "!git push" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9c396330", + "metadata": {}, + "outputs": [], + "source": [] + }, { "cell_type": "markdown", "id": "805622e8", @@ -562,7 +893,7 @@ "author": "Tomasz Ziętkiewicz", "email": "tomasz.zietkiewicz@amu.edu.pl", "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "Python 3", "language": "python", "name": "python3" }, @@ -577,7 +908,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.4" + "version": "3.9.16" }, "slideshow": { "slide_type": "slide" diff --git a/IUM_11/github-actions-hello b/IUM_11/github-actions-hello new file mode 160000 index 0000000..97c7272 --- /dev/null +++ b/IUM_11/github-actions-hello @@ -0,0 +1 @@ +Subproject commit 97c7272bcaccf4a578615526b71ca723bb2b6d00