diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 72818c1b2ba5d2f9ee591cebdac808a084399d3e..9b92ed42e7acd46451f388acdd177c62644e80a6 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -3,6 +3,7 @@ stages:
   - syntax
   - unit
   - acceptance
+  - release
 
 default:
   cache:
@@ -73,4 +74,22 @@ acceptance with puppet7 ubuntu2004:
   - bundle exec rake beaker
   tags:
   - puppet-tests
+module release:
+  stage: release
+  image: ruby:2.7.5
+  variables:
+    PUPPET_GEM_VERSION: "~> 7.14"
+    BLACKSMITH_FORGE_USERNAME: "$BLACKSMITH_FORGE_USERNAME"
+    BLACKSMITH_FORGE_API_KEY: "$BLACKSMITH_FORGE_API_KEY"
+  script:
+  - bundle exec puppet strings generate --format markdown --out REFERENCE.md
+  - bundle exec rake module:push
+  only:
+  - tags
+  except:
+  - branches
+  artifacts:
+    paths:
+    - pkg/
+    expire_in: 6 weeks
 
diff --git a/.sync.yml b/.sync.yml
index b9deeee4f26d50904e99f76ac4285b8e9db7ce01..605eb6bc84d659f26debb0f79ffe2701aef8203a 100644
--- a/.sync.yml
+++ b/.sync.yml
@@ -20,6 +20,7 @@ appveyor.yml:
       - syntax
       - unit
       - acceptance
+      - release
     custom_jobs:
       validate lint check rubocop-Ruby 2.7.5-Puppet ~> 7:
         stage: syntax
@@ -75,6 +76,24 @@ appveyor.yml:
           - bundle exec rake beaker
         tags:
           - puppet-tests
+      module release:
+        stage: release
+        image: ruby:2.7.5
+        variables:
+          PUPPET_GEM_VERSION: '~> 7.14'
+          BLACKSMITH_FORGE_USERNAME: '$BLACKSMITH_FORGE_USERNAME'
+          BLACKSMITH_FORGE_API_KEY: '$BLACKSMITH_FORGE_API_KEY'
+        script:
+          - bundle exec puppet strings generate --format markdown --out REFERENCE.md
+          - bundle exec rake module:push
+        only:
+          - tags
+        except:
+          - branches
+        artifacts:
+          paths:
+            - pkg/
+          expire_in: 6 weeks
 
 Gemfile:
   required:
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4c954cd23809875c77c3f144f06b41d807bd363b..9cc71772e76a1705a0456d86d6bc492b98a9dad3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,10 +2,6 @@
 
 All notable changes to this project will be documented in this file.
 
-## Release 0.1.0
+## Release 1.0.0
 
-**Features**
-
-**Bugfixes**
-
-**Known Issues**
+Initial release
diff --git a/metadata.json b/metadata.json
index ce4a3a96005254743a6300addbf8b5e0f62e454f..f8d5bb41dbaf51a1c2f4eadd2cab8f7a7eb46152 100644
--- a/metadata.json
+++ b/metadata.json
@@ -1,10 +1,12 @@
 {
   "name": "adullact-cfssl",
-  "version": "0.1.0",
+  "version": "1.0.0",
   "author": "adullact",
-  "summary": "",
+  "summary": "Install and configure CFSSL PKI.",
   "license": "AGPL-3.0",
-  "source": "",
+  "source": "https://gitlab.adullact.net/adullact/puppet-cfssl.git",
+  "project_page": "https://gitlab.adullact.net/adullact/puppet-cfssl/",
+  "issues_url": "https://gitlab.adullact.net/adullact/puppet-cfssl/issues",
   "dependencies": [
     {
       "name": "puppetlabs/stdlib",
@@ -37,6 +39,10 @@
       "version_requirement": ">= 6.21.0 < 8.0.0"
     }
   ],
+  "tags": [
+    "pki",
+    "cfssl"
+  ],
   "pdk-version": "2.5.0",
   "template-url": "https://github.com/puppetlabs/pdk-templates#2.5.0",
   "template-ref": "tags/2.5.0-0-g369d483"