diff --git a/jenkins/ci-pipelines/ci_stage_2.groovy b/jenkins/ci-pipelines/ci_stage_2.groovy
index 4002e01..a0c78d1 100644
--- a/jenkins/ci-pipelines/ci_stage_2.groovy
+++ b/jenkins/ci-pipelines/ci_stage_2.groovy
@@ -126,119 +126,6 @@
         }
     }
 
-    stage('Charm build') {
-        charms = [
-            'installers/charm/bundles/osm',
-            'installers/charm/bundles/osm-ha',
-            'installers/charm/grafana',
-            'installers/charm/osm-lcm',
-            'installers/charm/osm-mon',
-            'installers/charm/osm-nbi',
-            'installers/charm/osm-ng-ui',
-            'installers/charm/osm-pol',
-            'installers/charm/osm-ro',
-            'installers/charm/prometheus',
-        ]
-        parallelSteps = [:]
-        concurrency = sh(returnStdout: true, script: "expr `nproc` / 2").trim() as int
-        for (charmPath in charms) {
-            def directory = charmPath
-            if (fileExists("$charmPath/charmcraft.yaml")) {
-                CHECK_CHANGES = "git diff --name-only origin/$GERRIT_BRANCH -- $directory |wc -l"
-                charmsChanged = sh(returnStdout:true,  script: CHECK_CHANGES).trim()
-                if (charmsChanged != "0" || isMergeJob) {
-                    println("$directory has changes, rebuilding")
-
-                    parallelSteps[directory] = {
-                        waitUntil(quiet: true, initialRecurrencePeriod: 5) {
-                            if (concurrency > 0) {
-                                concurrency--
-                                true
-                            } else {
-                                sleep 5
-                                false
-                            }
-                        }
-                        try {
-                            dir("${directory}") {
-                                try {
-                                    sh "charmcraft pack --format json --verbosity brief 1> pack.json 2> pack-stderr.log"
-                                } catch (Exception e) {
-                                    sh "cat pack-stderr.log"
-                                    throw e
-                                }
-
-                                def charmFilename = sh(
-                                    returnStdout: true,
-                                    script: 'cat pack.json | jq -r ".charms[0], .bundles[0]" | grep -v null').trim()
-
-                                withCredentials([string(credentialsId: 'Charmstore', variable: 'CHARMCRAFT_AUTH')]) {
-                                    try {
-                                        println("Uploading $charmFilename")
-                                        sh "charmcraft upload --format json --verbosity brief $charmFilename 1> upload.json 2> upload-stderr.log"
-                                    } catch (Exception e) {
-                                        def errorMessage = sh(
-                                            returnStdout: true,
-                                            script: 'cat upload.json | jq -r ".errors[0].message" | grep -v null').trim()
-                                        if (errorMessage.contains("already exists")) {
-                                            println("No changes, skipping upload")
-                                            return 0
-                                        }
-                                        sh "cat upload-stderr.log"
-                                        throw e
-                                    }
-                                    def charmRevision = sh(
-                                        returnStdout: true,
-                                        script: 'cat upload.json | jq -r ".revision"').trim()
-
-                                    def charmBranch="merged"
-                                    if ( !JOB_NAME.contains('merge') ) {
-                                        charmBranch="${GERRIT_REFSPEC}".replaceAll('/','-')
-                                    }
-                                    def channel="latest"
-                                    if (BRANCH_NAME.startsWith("v")) {
-                                        channel=BRANCH_NAME.substring(1)
-                                    } else if (BRANCH_NAME!="master") {
-                                        REV="/"+BRANCH_NAME+REV.replaceAll('/','-')
-                                    }
-
-                                    def charmName = sh(
-                                        returnStdout:true,
-                                        script: "if [ -f bundle.yaml ];then cat bundle.yaml;else cat metadata.yaml;fi|yq -r .name").trim()
-
-                                    def resourceArgument = ""
-                                    try {
-                                        def resourceName = sh(
-                                            returnStdout:true,
-                                            script: "cat metadata.yaml | yq '.resources | keys | .[0]'").trim()
-
-                                        resourceArgument = "--resource $resourceName:1"
-
-                                        resourceName = sh(
-                                            returnStdout:true,
-                                            script: "cat metadata.yaml | yq '.resources | keys | .[1]'").trim()
-                                        if( resourceName != "null" ) {
-                                            resourceArgument += " --resource $resourceName:1"
-                                        }
-
-                                    } catch (Exception discard) {
-                                        print("No resource associated with bundle, skipping")
-                                    }
-
-                                    print("resourceArgument = $resourceArgument")
-
-                                    sh "charmcraft release ${charmName} --revision=${charmRevision} ${resourceArgument} --channel=${channel}/edge/${charmBranch}"
-                                }
-                            }
-                        } finally {
-                            concurrency++
-                        }
-                    }
-                }
-            }
-        }
-        parallel parallelSteps
-    }
     if ( do_stage_3 ) {
         stage('Build System') {
             def downstream_params_stage_3 = [
diff --git a/jenkins/ci-pipelines/ci_stage_3.groovy b/jenkins/ci-pipelines/ci_stage_3.groovy
index 83ae27e..9d5a6e4 100644
--- a/jenkins/ci-pipelines/ci_stage_3.groovy
+++ b/jenkins/ci-pipelines/ci_stage_3.groovy
@@ -674,56 +674,6 @@
                                 }
                             }
                         } // stage('Snap promotion')
-                        stage('Charm promotion') {
-                            charms = [
-                                'osm', // bundle
-                                'osm-ha', // bundle
-                                'osm-grafana',
-                                'osm-mariadb',
-                                'osm-lcm',
-                                'osm-mon',
-                                'osm-nbi',
-                                'osm-ng-ui',
-                                'osm-pol',
-                                'osm-ro',
-                                'osm-prometheus',
-                            ]
-                            for (charm in charms) {
-
-                                channel = 'latest'
-                                if (BRANCH_NAME.startsWith('v')) {
-                                    channel = BRANCH_NAME.substring(1)
-                                } else if (BRANCH_NAME != 'master') {
-                                    channel += '/' + BRANCH_NAME.replaceAll('/', '-')
-                                }
-
-                                withCredentials([string(credentialsId: 'Charmstore', variable: 'CHARMCRAFT_AUTH')]) {
-                                    sh "charmcraft status $charm --format json > ${charm}.json"
-                                    isCharm = sh(returnStdout: true, script: "grep architecture ${charm}.json | wc -l").trim() as int
-                                    if (isCharm) {
-                                        jqScriptEdge = "cat ${charm}.json | jq -r '.[] | select(.track==\"$channel\") | .mappings[] | select(.base.architecture==\"amd64\" and .base.channel==\"20.04\") | .releases[] | select(.channel==\"$channel/edge/merged\")| .version'|head -1"
-                                        jqScriptBeta = "cat ${charm}.json | jq -r '.[] | select(.track==\"$channel\") | .mappings[] | select(.base.architecture==\"amd64\" and .base.channel==\"20.04\") | .releases[] | select(.channel==\"$channel/beta\")| .version'|head -1"
-                                    } else {
-                                        jqScriptEdge = "cat ${charm}.json | jq -r '.[] | select(.track==\"$channel\") | .mappings[].releases[] | select(.channel==\"$channel/edge/merged\")| .version'|head -1"
-                                        jqScriptBeta = "cat ${charm}.json | jq -r '.[] | select(.track==\"$channel\") | .mappings[].releases[] | select(.channel==\"$channel/beta\")| .version'|head -1"
-                                    }
-                                    // edge/merged is used in place of /edge as 10.1.0 LTS uses latest/edge
-                                    edge_rev = sh(returnStdout: true, script: jqScriptEdge).trim()
-                                    beta_rev = sh(returnStdout: true, script: jqScriptBeta).trim()
-                                    try { edge_rev = edge_rev as int } catch (NumberFormatException nfe) {edge_rev = 0}
-                                    try { beta_rev = beta_rev as int } catch (NumberFormatException nfe) {beta_rev = 0}
-
-                                    print "Edge: $edge_rev, Beta: $beta_rev"
-
-                                    if (edge_rev > beta_rev) {
-                                        print "Promoting $edge_rev to beta in place of $beta_rev"
-                                        beta_track = channel + 'beta'
-                                        sh "charmcraft release ${charm} --revision=${edge_rev} --channel=${channel}/beta"
-                                    }
-
-                                }
-                            }
-                        } // stage('Charm promotion')
                     } // if (params.DO_DOCKERPUSH)
                 } // stage('Archive')
             } // if (params.SAVE_ARTIFACTS_OVERRIDE || stage_archive)
