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 @@
"\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",
""
@@ -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