diff --git a/.gitignore b/.gitignore
index e3b9c3c43e..53365ed0b4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -95,6 +95,7 @@ cpu.out
 /.go-licenses
 
 # Snapcraft
+/gitea_a*.txt
 snap/.snapcraft/
 parts/
 stage/
diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml
index 2bd8c600cb..fa2b4a3979 100644
--- a/snap/snapcraft.yaml
+++ b/snap/snapcraft.yaml
@@ -8,7 +8,7 @@ description: |
 
 icon: public/assets/img/logo.png
 confinement: strict
-base: core18
+base: core22
 adopt-info: gitea
 
 architectures:
@@ -44,12 +44,13 @@ parts:
     source: .
     stage-packages: [ git, sqlite3, openssh-client ]
     build-packages: [ git, libpam0g-dev, libsqlite3-dev, build-essential]
-    build-snaps: [ go, node/18/stable ]
+    build-snaps: [ go/1.21/stable, node/18/stable ]
     build-environment:
       - LDFLAGS: ""
     override-pull: |
-      snapcraftctl pull
+      craftctl default
 
+      git config --global --add safe.directory /root/parts/gitea/src
       last_committed_tag="$(git for-each-ref --sort=taggerdate --format '%(tag)' refs/tags | tail -n 1)"
       last_released_tag="$(snap info gitea | awk '$1 == "latest/candidate:" { print $2 }')"
       # If the latest tag from the upstream project has not been released to
@@ -61,8 +62,8 @@ parts:
 
       version="$(git describe --always | sed -e 's/-/+git/;y/-/./')"
       [ -n "$(echo $version | grep "+git")" ] && grade=devel || grade=stable
-      snapcraftctl set-version "$version"
-      snapcraftctl set-grade "$grade"
+      craftctl set version "$version"
+      craftctl set grade="$grade"
 
     override-build: |
       set -x