diff --git a/tests/immutable_file/.gitattributes b/tests/convert/basic/immutable_files/.gitattributes
similarity index 100%
rename from tests/immutable_file/.gitattributes
rename to tests/convert/basic/immutable_files/.gitattributes
diff --git a/tests/immutable_file/.gitignore b/tests/convert/basic/immutable_files/.gitignore
similarity index 100%
rename from tests/immutable_file/.gitignore
rename to tests/convert/basic/immutable_files/.gitignore
diff --git a/tests/immutable_file/push.yaml b/tests/convert/basic/immutable_files/push.yaml
similarity index 100%
rename from tests/immutable_file/push.yaml
rename to tests/convert/basic/immutable_files/push.yaml
diff --git a/tests/immutable_file/release.yaml b/tests/convert/basic/immutable_files/release.yaml
similarity index 100%
rename from tests/immutable_file/release.yaml
rename to tests/convert/basic/immutable_files/release.yaml
diff --git a/tests/convert/clang-tidy/immutable_files/.gitattributes b/tests/convert/clang-tidy/immutable_files/.gitattributes
new file mode 100644
index 0000000..b910c4a
--- /dev/null
+++ b/tests/convert/clang-tidy/immutable_files/.gitattributes
@@ -0,0 +1,33 @@
+*.avi filter=lfs diff=lfs merge=lfs -text
+*.bz2 filter=lfs diff=lfs merge=lfs -text
+*.djvu filter=lfs diff=lfs merge=lfs -text
+*.doc filter=lfs diff=lfs merge=lfs -text
+*.docx filter=lfs diff=lfs merge=lfs -text
+*.epub filter=lfs diff=lfs merge=lfs -text
+*.gz filter=lfs diff=lfs merge=lfs -text
+*.ipynb filter=lfs diff=lfs merge=lfs -text
+*.jpeg filter=lfs diff=lfs merge=lfs -text
+*.JPEG filter=lfs diff=lfs merge=lfs -text
+*.jpg filter=lfs diff=lfs merge=lfs -text
+*.JPG filter=lfs diff=lfs merge=lfs -text
+*.mkv filter=lfs diff=lfs merge=lfs -text
+*.mp4 filter=lfs diff=lfs merge=lfs -text
+*.ods filter=lfs diff=lfs merge=lfs -text
+*.odt filter=lfs diff=lfs merge=lfs -text
+*.otf filter=lfs diff=lfs merge=lfs -text
+*.pdf filter=lfs diff=lfs merge=lfs -text
+*.PDF filter=lfs diff=lfs merge=lfs -text
+*.png filter=lfs diff=lfs merge=lfs -text
+*.PNG filter=lfs diff=lfs merge=lfs -text
+*.ppt filter=lfs diff=lfs merge=lfs -text
+*.pptx filter=lfs diff=lfs merge=lfs -text
+*.ps filter=lfs diff=lfs merge=lfs -text
+*.rar filter=lfs diff=lfs merge=lfs -text
+*.tar filter=lfs diff=lfs merge=lfs -text
+*.tgz filter=lfs diff=lfs merge=lfs -text
+*.ttf filter=lfs diff=lfs merge=lfs -text
+*.webm filter=lfs diff=lfs merge=lfs -text
+*.xls filter=lfs diff=lfs merge=lfs -text
+*.xlsx filter=lfs diff=lfs merge=lfs -text
+*.xz filter=lfs diff=lfs merge=lfs -text
+*.zip filter=lfs diff=lfs merge=lfs -text
diff --git a/tests/convert/clang-tidy/immutable_files/.gitignore b/tests/convert/clang-tidy/immutable_files/.gitignore
new file mode 100644
index 0000000..754f776
--- /dev/null
+++ b/tests/convert/clang-tidy/immutable_files/.gitignore
@@ -0,0 +1,23 @@
+################################
+## White list based gitignore ##
+################################
+
+# forbidden
+*
+.*
+
+# allowed
+!.gitignore
+!.gitattributes
+!.gitea/
+!.gitea/issue_template/
+!.gitea/workflows/
+!*.yaml
+!Makefile
+!CMakeLists.txt
+!h[0-8]/
+!*.m
+!*.c
+!*.cpp
+!*.h
+!*.md
diff --git a/tests/convert/clang-tidy/immutable_files/push.yaml b/tests/convert/clang-tidy/immutable_files/push.yaml
new file mode 100644
index 0000000..664f371
--- /dev/null
+++ b/tests/convert/clang-tidy/immutable_files/push.yaml
@@ -0,0 +1,19 @@
+name: Run JOJ3 on Push
+on: [push]
+
+jobs:
+  run:
+    container:
+      image: focs.ji.sjtu.edu.cn:5000/gitea/runner-images:focs-ubuntu-latest-slim
+      volumes:
+        - /home/tt/.config:/home/tt/.config
+        - /home/tt/.cache:/home/tt/.cache
+        - /home/tt/.ssh:/home/tt/.ssh
+    steps:
+      - name: Check out repository code
+        uses: https://gitea.com/BoYanZh/checkout@focs
+        with:
+          fetch-depth: 0
+      - name: run joj3
+        run: |
+          sudo -E -u tt joj3 -conf-root /home/tt/.config/joj/tests/homework
diff --git a/tests/convert/clang-tidy/immutable_files/release.yaml b/tests/convert/clang-tidy/immutable_files/release.yaml
new file mode 100644
index 0000000..e740403
--- /dev/null
+++ b/tests/convert/clang-tidy/immutable_files/release.yaml
@@ -0,0 +1,21 @@
+name: Run JOJ3 on Release
+on:
+  release:
+    types: [published]
+
+jobs:
+  run:
+    container:
+      image: focs.ji.sjtu.edu.cn:5000/gitea/runner-images:focs-ubuntu-latest-slim
+      volumes:
+        - /home/tt/.config:/home/tt/.config
+        - /home/tt/.cache:/home/tt/.cache
+        - /home/tt/.ssh:/home/tt/.ssh
+    steps:
+      - name: Check out repository code
+        uses: https://gitea.com/BoYanZh/checkout@focs
+        with:
+          fetch-depth: 0
+      - name: run joj3
+        run: |
+          sudo -E -u tt joj3 -conf-root "/home/tt/.config/joj/tests/homework" -conf-name "conf-release.json" -tag "${{ github.ref_name }}"
diff --git a/tests/convert/cppcheck/immutable_files/.gitattributes b/tests/convert/cppcheck/immutable_files/.gitattributes
new file mode 100644
index 0000000..b910c4a
--- /dev/null
+++ b/tests/convert/cppcheck/immutable_files/.gitattributes
@@ -0,0 +1,33 @@
+*.avi filter=lfs diff=lfs merge=lfs -text
+*.bz2 filter=lfs diff=lfs merge=lfs -text
+*.djvu filter=lfs diff=lfs merge=lfs -text
+*.doc filter=lfs diff=lfs merge=lfs -text
+*.docx filter=lfs diff=lfs merge=lfs -text
+*.epub filter=lfs diff=lfs merge=lfs -text
+*.gz filter=lfs diff=lfs merge=lfs -text
+*.ipynb filter=lfs diff=lfs merge=lfs -text
+*.jpeg filter=lfs diff=lfs merge=lfs -text
+*.JPEG filter=lfs diff=lfs merge=lfs -text
+*.jpg filter=lfs diff=lfs merge=lfs -text
+*.JPG filter=lfs diff=lfs merge=lfs -text
+*.mkv filter=lfs diff=lfs merge=lfs -text
+*.mp4 filter=lfs diff=lfs merge=lfs -text
+*.ods filter=lfs diff=lfs merge=lfs -text
+*.odt filter=lfs diff=lfs merge=lfs -text
+*.otf filter=lfs diff=lfs merge=lfs -text
+*.pdf filter=lfs diff=lfs merge=lfs -text
+*.PDF filter=lfs diff=lfs merge=lfs -text
+*.png filter=lfs diff=lfs merge=lfs -text
+*.PNG filter=lfs diff=lfs merge=lfs -text
+*.ppt filter=lfs diff=lfs merge=lfs -text
+*.pptx filter=lfs diff=lfs merge=lfs -text
+*.ps filter=lfs diff=lfs merge=lfs -text
+*.rar filter=lfs diff=lfs merge=lfs -text
+*.tar filter=lfs diff=lfs merge=lfs -text
+*.tgz filter=lfs diff=lfs merge=lfs -text
+*.ttf filter=lfs diff=lfs merge=lfs -text
+*.webm filter=lfs diff=lfs merge=lfs -text
+*.xls filter=lfs diff=lfs merge=lfs -text
+*.xlsx filter=lfs diff=lfs merge=lfs -text
+*.xz filter=lfs diff=lfs merge=lfs -text
+*.zip filter=lfs diff=lfs merge=lfs -text
diff --git a/tests/convert/cppcheck/immutable_files/.gitignore b/tests/convert/cppcheck/immutable_files/.gitignore
new file mode 100644
index 0000000..754f776
--- /dev/null
+++ b/tests/convert/cppcheck/immutable_files/.gitignore
@@ -0,0 +1,23 @@
+################################
+## White list based gitignore ##
+################################
+
+# forbidden
+*
+.*
+
+# allowed
+!.gitignore
+!.gitattributes
+!.gitea/
+!.gitea/issue_template/
+!.gitea/workflows/
+!*.yaml
+!Makefile
+!CMakeLists.txt
+!h[0-8]/
+!*.m
+!*.c
+!*.cpp
+!*.h
+!*.md
diff --git a/tests/convert/cppcheck/immutable_files/push.yaml b/tests/convert/cppcheck/immutable_files/push.yaml
new file mode 100644
index 0000000..664f371
--- /dev/null
+++ b/tests/convert/cppcheck/immutable_files/push.yaml
@@ -0,0 +1,19 @@
+name: Run JOJ3 on Push
+on: [push]
+
+jobs:
+  run:
+    container:
+      image: focs.ji.sjtu.edu.cn:5000/gitea/runner-images:focs-ubuntu-latest-slim
+      volumes:
+        - /home/tt/.config:/home/tt/.config
+        - /home/tt/.cache:/home/tt/.cache
+        - /home/tt/.ssh:/home/tt/.ssh
+    steps:
+      - name: Check out repository code
+        uses: https://gitea.com/BoYanZh/checkout@focs
+        with:
+          fetch-depth: 0
+      - name: run joj3
+        run: |
+          sudo -E -u tt joj3 -conf-root /home/tt/.config/joj/tests/homework
diff --git a/tests/convert/cppcheck/immutable_files/release.yaml b/tests/convert/cppcheck/immutable_files/release.yaml
new file mode 100644
index 0000000..e740403
--- /dev/null
+++ b/tests/convert/cppcheck/immutable_files/release.yaml
@@ -0,0 +1,21 @@
+name: Run JOJ3 on Release
+on:
+  release:
+    types: [published]
+
+jobs:
+  run:
+    container:
+      image: focs.ji.sjtu.edu.cn:5000/gitea/runner-images:focs-ubuntu-latest-slim
+      volumes:
+        - /home/tt/.config:/home/tt/.config
+        - /home/tt/.cache:/home/tt/.cache
+        - /home/tt/.ssh:/home/tt/.ssh
+    steps:
+      - name: Check out repository code
+        uses: https://gitea.com/BoYanZh/checkout@focs
+        with:
+          fetch-depth: 0
+      - name: run joj3
+        run: |
+          sudo -E -u tt joj3 -conf-root "/home/tt/.config/joj/tests/homework" -conf-name "conf-release.json" -tag "${{ github.ref_name }}"
diff --git a/tests/convert/cpplint/immutable_files/.gitattributes b/tests/convert/cpplint/immutable_files/.gitattributes
new file mode 100644
index 0000000..b910c4a
--- /dev/null
+++ b/tests/convert/cpplint/immutable_files/.gitattributes
@@ -0,0 +1,33 @@
+*.avi filter=lfs diff=lfs merge=lfs -text
+*.bz2 filter=lfs diff=lfs merge=lfs -text
+*.djvu filter=lfs diff=lfs merge=lfs -text
+*.doc filter=lfs diff=lfs merge=lfs -text
+*.docx filter=lfs diff=lfs merge=lfs -text
+*.epub filter=lfs diff=lfs merge=lfs -text
+*.gz filter=lfs diff=lfs merge=lfs -text
+*.ipynb filter=lfs diff=lfs merge=lfs -text
+*.jpeg filter=lfs diff=lfs merge=lfs -text
+*.JPEG filter=lfs diff=lfs merge=lfs -text
+*.jpg filter=lfs diff=lfs merge=lfs -text
+*.JPG filter=lfs diff=lfs merge=lfs -text
+*.mkv filter=lfs diff=lfs merge=lfs -text
+*.mp4 filter=lfs diff=lfs merge=lfs -text
+*.ods filter=lfs diff=lfs merge=lfs -text
+*.odt filter=lfs diff=lfs merge=lfs -text
+*.otf filter=lfs diff=lfs merge=lfs -text
+*.pdf filter=lfs diff=lfs merge=lfs -text
+*.PDF filter=lfs diff=lfs merge=lfs -text
+*.png filter=lfs diff=lfs merge=lfs -text
+*.PNG filter=lfs diff=lfs merge=lfs -text
+*.ppt filter=lfs diff=lfs merge=lfs -text
+*.pptx filter=lfs diff=lfs merge=lfs -text
+*.ps filter=lfs diff=lfs merge=lfs -text
+*.rar filter=lfs diff=lfs merge=lfs -text
+*.tar filter=lfs diff=lfs merge=lfs -text
+*.tgz filter=lfs diff=lfs merge=lfs -text
+*.ttf filter=lfs diff=lfs merge=lfs -text
+*.webm filter=lfs diff=lfs merge=lfs -text
+*.xls filter=lfs diff=lfs merge=lfs -text
+*.xlsx filter=lfs diff=lfs merge=lfs -text
+*.xz filter=lfs diff=lfs merge=lfs -text
+*.zip filter=lfs diff=lfs merge=lfs -text
diff --git a/tests/convert/cpplint/immutable_files/.gitignore b/tests/convert/cpplint/immutable_files/.gitignore
new file mode 100644
index 0000000..754f776
--- /dev/null
+++ b/tests/convert/cpplint/immutable_files/.gitignore
@@ -0,0 +1,23 @@
+################################
+## White list based gitignore ##
+################################
+
+# forbidden
+*
+.*
+
+# allowed
+!.gitignore
+!.gitattributes
+!.gitea/
+!.gitea/issue_template/
+!.gitea/workflows/
+!*.yaml
+!Makefile
+!CMakeLists.txt
+!h[0-8]/
+!*.m
+!*.c
+!*.cpp
+!*.h
+!*.md
diff --git a/tests/convert/cpplint/immutable_files/push.yaml b/tests/convert/cpplint/immutable_files/push.yaml
new file mode 100644
index 0000000..664f371
--- /dev/null
+++ b/tests/convert/cpplint/immutable_files/push.yaml
@@ -0,0 +1,19 @@
+name: Run JOJ3 on Push
+on: [push]
+
+jobs:
+  run:
+    container:
+      image: focs.ji.sjtu.edu.cn:5000/gitea/runner-images:focs-ubuntu-latest-slim
+      volumes:
+        - /home/tt/.config:/home/tt/.config
+        - /home/tt/.cache:/home/tt/.cache
+        - /home/tt/.ssh:/home/tt/.ssh
+    steps:
+      - name: Check out repository code
+        uses: https://gitea.com/BoYanZh/checkout@focs
+        with:
+          fetch-depth: 0
+      - name: run joj3
+        run: |
+          sudo -E -u tt joj3 -conf-root /home/tt/.config/joj/tests/homework
diff --git a/tests/convert/cpplint/immutable_files/release.yaml b/tests/convert/cpplint/immutable_files/release.yaml
new file mode 100644
index 0000000..e740403
--- /dev/null
+++ b/tests/convert/cpplint/immutable_files/release.yaml
@@ -0,0 +1,21 @@
+name: Run JOJ3 on Release
+on:
+  release:
+    types: [published]
+
+jobs:
+  run:
+    container:
+      image: focs.ji.sjtu.edu.cn:5000/gitea/runner-images:focs-ubuntu-latest-slim
+      volumes:
+        - /home/tt/.config:/home/tt/.config
+        - /home/tt/.cache:/home/tt/.cache
+        - /home/tt/.ssh:/home/tt/.ssh
+    steps:
+      - name: Check out repository code
+        uses: https://gitea.com/BoYanZh/checkout@focs
+        with:
+          fetch-depth: 0
+      - name: run joj3
+        run: |
+          sudo -E -u tt joj3 -conf-root "/home/tt/.config/joj/tests/homework" -conf-name "conf-release.json" -tag "${{ github.ref_name }}"
diff --git a/tests/convert/diff/immutable_files/.gitattributes b/tests/convert/diff/immutable_files/.gitattributes
new file mode 100644
index 0000000..b910c4a
--- /dev/null
+++ b/tests/convert/diff/immutable_files/.gitattributes
@@ -0,0 +1,33 @@
+*.avi filter=lfs diff=lfs merge=lfs -text
+*.bz2 filter=lfs diff=lfs merge=lfs -text
+*.djvu filter=lfs diff=lfs merge=lfs -text
+*.doc filter=lfs diff=lfs merge=lfs -text
+*.docx filter=lfs diff=lfs merge=lfs -text
+*.epub filter=lfs diff=lfs merge=lfs -text
+*.gz filter=lfs diff=lfs merge=lfs -text
+*.ipynb filter=lfs diff=lfs merge=lfs -text
+*.jpeg filter=lfs diff=lfs merge=lfs -text
+*.JPEG filter=lfs diff=lfs merge=lfs -text
+*.jpg filter=lfs diff=lfs merge=lfs -text
+*.JPG filter=lfs diff=lfs merge=lfs -text
+*.mkv filter=lfs diff=lfs merge=lfs -text
+*.mp4 filter=lfs diff=lfs merge=lfs -text
+*.ods filter=lfs diff=lfs merge=lfs -text
+*.odt filter=lfs diff=lfs merge=lfs -text
+*.otf filter=lfs diff=lfs merge=lfs -text
+*.pdf filter=lfs diff=lfs merge=lfs -text
+*.PDF filter=lfs diff=lfs merge=lfs -text
+*.png filter=lfs diff=lfs merge=lfs -text
+*.PNG filter=lfs diff=lfs merge=lfs -text
+*.ppt filter=lfs diff=lfs merge=lfs -text
+*.pptx filter=lfs diff=lfs merge=lfs -text
+*.ps filter=lfs diff=lfs merge=lfs -text
+*.rar filter=lfs diff=lfs merge=lfs -text
+*.tar filter=lfs diff=lfs merge=lfs -text
+*.tgz filter=lfs diff=lfs merge=lfs -text
+*.ttf filter=lfs diff=lfs merge=lfs -text
+*.webm filter=lfs diff=lfs merge=lfs -text
+*.xls filter=lfs diff=lfs merge=lfs -text
+*.xlsx filter=lfs diff=lfs merge=lfs -text
+*.xz filter=lfs diff=lfs merge=lfs -text
+*.zip filter=lfs diff=lfs merge=lfs -text
diff --git a/tests/convert/diff/immutable_files/.gitignore b/tests/convert/diff/immutable_files/.gitignore
new file mode 100644
index 0000000..754f776
--- /dev/null
+++ b/tests/convert/diff/immutable_files/.gitignore
@@ -0,0 +1,23 @@
+################################
+## White list based gitignore ##
+################################
+
+# forbidden
+*
+.*
+
+# allowed
+!.gitignore
+!.gitattributes
+!.gitea/
+!.gitea/issue_template/
+!.gitea/workflows/
+!*.yaml
+!Makefile
+!CMakeLists.txt
+!h[0-8]/
+!*.m
+!*.c
+!*.cpp
+!*.h
+!*.md
diff --git a/tests/convert/diff/immutable_files/push.yaml b/tests/convert/diff/immutable_files/push.yaml
new file mode 100644
index 0000000..664f371
--- /dev/null
+++ b/tests/convert/diff/immutable_files/push.yaml
@@ -0,0 +1,19 @@
+name: Run JOJ3 on Push
+on: [push]
+
+jobs:
+  run:
+    container:
+      image: focs.ji.sjtu.edu.cn:5000/gitea/runner-images:focs-ubuntu-latest-slim
+      volumes:
+        - /home/tt/.config:/home/tt/.config
+        - /home/tt/.cache:/home/tt/.cache
+        - /home/tt/.ssh:/home/tt/.ssh
+    steps:
+      - name: Check out repository code
+        uses: https://gitea.com/BoYanZh/checkout@focs
+        with:
+          fetch-depth: 0
+      - name: run joj3
+        run: |
+          sudo -E -u tt joj3 -conf-root /home/tt/.config/joj/tests/homework
diff --git a/tests/convert/diff/immutable_files/release.yaml b/tests/convert/diff/immutable_files/release.yaml
new file mode 100644
index 0000000..e740403
--- /dev/null
+++ b/tests/convert/diff/immutable_files/release.yaml
@@ -0,0 +1,21 @@
+name: Run JOJ3 on Release
+on:
+  release:
+    types: [published]
+
+jobs:
+  run:
+    container:
+      image: focs.ji.sjtu.edu.cn:5000/gitea/runner-images:focs-ubuntu-latest-slim
+      volumes:
+        - /home/tt/.config:/home/tt/.config
+        - /home/tt/.cache:/home/tt/.cache
+        - /home/tt/.ssh:/home/tt/.ssh
+    steps:
+      - name: Check out repository code
+        uses: https://gitea.com/BoYanZh/checkout@focs
+        with:
+          fetch-depth: 0
+      - name: run joj3
+        run: |
+          sudo -E -u tt joj3 -conf-root "/home/tt/.config/joj/tests/homework" -conf-name "conf-release.json" -tag "${{ github.ref_name }}"
diff --git a/tests/convert/keyword/immutable_files/.gitattributes b/tests/convert/keyword/immutable_files/.gitattributes
new file mode 100644
index 0000000..b910c4a
--- /dev/null
+++ b/tests/convert/keyword/immutable_files/.gitattributes
@@ -0,0 +1,33 @@
+*.avi filter=lfs diff=lfs merge=lfs -text
+*.bz2 filter=lfs diff=lfs merge=lfs -text
+*.djvu filter=lfs diff=lfs merge=lfs -text
+*.doc filter=lfs diff=lfs merge=lfs -text
+*.docx filter=lfs diff=lfs merge=lfs -text
+*.epub filter=lfs diff=lfs merge=lfs -text
+*.gz filter=lfs diff=lfs merge=lfs -text
+*.ipynb filter=lfs diff=lfs merge=lfs -text
+*.jpeg filter=lfs diff=lfs merge=lfs -text
+*.JPEG filter=lfs diff=lfs merge=lfs -text
+*.jpg filter=lfs diff=lfs merge=lfs -text
+*.JPG filter=lfs diff=lfs merge=lfs -text
+*.mkv filter=lfs diff=lfs merge=lfs -text
+*.mp4 filter=lfs diff=lfs merge=lfs -text
+*.ods filter=lfs diff=lfs merge=lfs -text
+*.odt filter=lfs diff=lfs merge=lfs -text
+*.otf filter=lfs diff=lfs merge=lfs -text
+*.pdf filter=lfs diff=lfs merge=lfs -text
+*.PDF filter=lfs diff=lfs merge=lfs -text
+*.png filter=lfs diff=lfs merge=lfs -text
+*.PNG filter=lfs diff=lfs merge=lfs -text
+*.ppt filter=lfs diff=lfs merge=lfs -text
+*.pptx filter=lfs diff=lfs merge=lfs -text
+*.ps filter=lfs diff=lfs merge=lfs -text
+*.rar filter=lfs diff=lfs merge=lfs -text
+*.tar filter=lfs diff=lfs merge=lfs -text
+*.tgz filter=lfs diff=lfs merge=lfs -text
+*.ttf filter=lfs diff=lfs merge=lfs -text
+*.webm filter=lfs diff=lfs merge=lfs -text
+*.xls filter=lfs diff=lfs merge=lfs -text
+*.xlsx filter=lfs diff=lfs merge=lfs -text
+*.xz filter=lfs diff=lfs merge=lfs -text
+*.zip filter=lfs diff=lfs merge=lfs -text
diff --git a/tests/convert/keyword/immutable_files/.gitignore b/tests/convert/keyword/immutable_files/.gitignore
new file mode 100644
index 0000000..754f776
--- /dev/null
+++ b/tests/convert/keyword/immutable_files/.gitignore
@@ -0,0 +1,23 @@
+################################
+## White list based gitignore ##
+################################
+
+# forbidden
+*
+.*
+
+# allowed
+!.gitignore
+!.gitattributes
+!.gitea/
+!.gitea/issue_template/
+!.gitea/workflows/
+!*.yaml
+!Makefile
+!CMakeLists.txt
+!h[0-8]/
+!*.m
+!*.c
+!*.cpp
+!*.h
+!*.md
diff --git a/tests/convert/keyword/immutable_files/push.yaml b/tests/convert/keyword/immutable_files/push.yaml
new file mode 100644
index 0000000..664f371
--- /dev/null
+++ b/tests/convert/keyword/immutable_files/push.yaml
@@ -0,0 +1,19 @@
+name: Run JOJ3 on Push
+on: [push]
+
+jobs:
+  run:
+    container:
+      image: focs.ji.sjtu.edu.cn:5000/gitea/runner-images:focs-ubuntu-latest-slim
+      volumes:
+        - /home/tt/.config:/home/tt/.config
+        - /home/tt/.cache:/home/tt/.cache
+        - /home/tt/.ssh:/home/tt/.ssh
+    steps:
+      - name: Check out repository code
+        uses: https://gitea.com/BoYanZh/checkout@focs
+        with:
+          fetch-depth: 0
+      - name: run joj3
+        run: |
+          sudo -E -u tt joj3 -conf-root /home/tt/.config/joj/tests/homework
diff --git a/tests/convert/keyword/immutable_files/release.yaml b/tests/convert/keyword/immutable_files/release.yaml
new file mode 100644
index 0000000..e740403
--- /dev/null
+++ b/tests/convert/keyword/immutable_files/release.yaml
@@ -0,0 +1,21 @@
+name: Run JOJ3 on Release
+on:
+  release:
+    types: [published]
+
+jobs:
+  run:
+    container:
+      image: focs.ji.sjtu.edu.cn:5000/gitea/runner-images:focs-ubuntu-latest-slim
+      volumes:
+        - /home/tt/.config:/home/tt/.config
+        - /home/tt/.cache:/home/tt/.cache
+        - /home/tt/.ssh:/home/tt/.ssh
+    steps:
+      - name: Check out repository code
+        uses: https://gitea.com/BoYanZh/checkout@focs
+        with:
+          fetch-depth: 0
+      - name: run joj3
+        run: |
+          sudo -E -u tt joj3 -conf-root "/home/tt/.config/joj/tests/homework" -conf-name "conf-release.json" -tag "${{ github.ref_name }}"