Skip to content

Commit

Permalink
Fix chart release process (#28)
Browse files Browse the repository at this point in the history
- Always use bash shell in release workflow
- Only update timestamp for new charts
- Update chart repo index.yaml in pr
- Make commit and pr subject repo agnostic

Signed-off-by: Tamal Saha <tamal@appscode.com>
  • Loading branch information
tamalsaha committed Jun 14, 2020
1 parent 4c11ef1 commit 37671b0
Show file tree
Hide file tree
Showing 2 changed files with 166 additions and 104 deletions.
141 changes: 66 additions & 75 deletions .github/workflows/ci.yml
Expand Up @@ -3,97 +3,88 @@ name: CI
on:
pull_request:
branches:
- '*'
- "*"
push:
branches:
- master

jobs:

build:
name: Build
runs-on: ubuntu-latest
steps:
- name: Set up Go 1.14
uses: actions/setup-go@v1
with:
go-version: 1.14
id: go

- name: Set up Go 1.14
uses: actions/setup-go@v1
with:
go-version: 1.14
id: go

- name: Check out code into the Go module directory
uses: actions/checkout@v1
- uses: actions/checkout@v1

- name: Set up Docker Buildx
id: buildx
uses: crazy-max/ghaction-docker-buildx@v1
with:
buildx-version: latest
qemu-version: latest
- name: Set up Docker Buildx
id: buildx
uses: crazy-max/ghaction-docker-buildx@v1
with:
buildx-version: latest
qemu-version: latest

- name: Available platforms
run: echo ${{ steps.buildx.outputs.platforms }}
- name: Available platforms
run: echo ${{ steps.buildx.outputs.platforms }}

- name: Prepare Host
run: |
sudo apt-get -qq update || true
sudo apt-get install -y bzr
# install yq
curl -fsSL -o yq https://github.com/mikefarah/yq/releases/download/3.3.0/yq_linux_amd64
chmod +x yq
sudo mv yq /usr/local/bin/yq
# install kubectl
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.17.0/bin/linux/amd64/kubectl
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl
- name: Prepare Host
run: |
sudo apt-get -qq update || true
sudo apt-get install -y bzr
# install yq
curl -fsSL -o yq https://github.com/mikefarah/yq/releases/download/3.3.0/yq_linux_amd64
chmod +x yq
sudo mv yq /usr/local/bin/yq
# install kubectl
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.17.0/bin/linux/amd64/kubectl
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl
- name: Run checks
run: |
make ci
- name: Run checks
run: |
make ci
- name: Build
env:
REGISTRY: appscodeci
DOCKER_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
USERNAME: 1gtm
run: |
docker login --username ${USERNAME} --password ${DOCKER_TOKEN}
make push
- name: Build
env:
REGISTRY: appscodeci
DOCKER_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
USERNAME: 1gtm
run: |
docker login --username ${USERNAME} --password ${DOCKER_TOKEN}
make push
- name: Create Kubernetes cluster
id: kind
uses: engineerd/setup-kind@v0.1.0
with:
version: v0.7.0
config: hack/kubernetes/kind.yaml
- name: Create Kubernetes cluster
id: kind
uses: engineerd/setup-kind@v0.3.0
with:
version: v0.8.1
config: hack/kubernetes/kind.yaml

- name: Prepare cluster for testing
id: local-path
env:
DOCKER_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
USERNAME: 1gtm
REGISTRY_SECRET: regcred
run: |
echo "waiting for nodes to be ready ..."
kubectl wait --for=condition=Ready nodes --all --timeout=5m
kubectl get nodes
echo
echo "installing local-path provisioner ..."
kubectl delete storageclass --all
kubectl apply -f https://github.com/rancher/local-path-provisioner/raw/v0.0.12/deploy/local-path-storage.yaml
kubectl wait --for=condition=Ready pods -n local-path-storage --all --timeout=5m
kubectl apply -f hack/kubernetes/storageclass/standard.yaml
echo
echo "create docker-registry secret"
kubectl create secret docker-registry ${REGISTRY_SECRET} --namespace=kube-system --docker-server=https://index.docker.io/v1/ --docker-username=${USERNAME} --docker-password=${DOCKER_TOKEN}
- name: Prepare cluster for testing
id: local-path
env:
DOCKER_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
USERNAME: 1gtm
REGISTRY_SECRET: regcred
run: |
echo "waiting for nodes to be ready ..."
kubectl wait --for=condition=Ready nodes --all --timeout=5m
kubectl get nodes
echo
echo "create docker-registry secret"
kubectl create secret docker-registry ${REGISTRY_SECRET} --namespace=kube-system --docker-server=https://index.docker.io/v1/ --docker-username=${USERNAME} --docker-password=${DOCKER_TOKEN}
- name: Install CRDs
run: |
kubectl apply -f https://github.com/stashed/apimachinery/raw/master/api/crds/stash.appscode.com_functions.yaml
kubectl apply -f https://github.com/stashed/apimachinery/raw/master/api/crds/stash.appscode.com_tasks.yaml
kubectl wait --for=condition=NamesAccepted crds --all --timeout=5m
- name: Install CRDs
run: |
kubectl apply -f https://github.com/stashed/apimachinery/raw/master/crds/stash.appscode.com_functions.yaml
kubectl apply -f https://github.com/stashed/apimachinery/raw/master/crds/stash.appscode.com_tasks.yaml
kubectl wait --for=condition=NamesAccepted crds --all --timeout=5m
- name: Test charts
run: |
export KUBECONFIG=$HOME/.kube/config
make ct
- name: Test charts
run: |
export KUBECONFIG=$HOME/.kube/config
make ct
129 changes: 100 additions & 29 deletions .github/workflows/release.yml
Expand Up @@ -3,39 +3,110 @@ name: Release
on:
push:
tags:
- '*.*'
- '*.*.*'
- "*.*"

jobs:

build:
name: Build
runs-on: ubuntu-latest
defaults:
run:
shell: bash
steps:
- name: Check out code into the Go module directory
uses: actions/checkout@v1

- name: Parse Parameters
id: params
run: |
GIT_TAG=${GITHUB_REF#'refs/tags/'}
echo ::set-output name=git_tag::$GIT_TAG
while IFS=$': \t' read -r marker v; do
case $marker in
Release)
echo ::set-output name=release::$v
;;
Release-tracker)
echo ::set-output name=release_tracker::$v
;;
esac
done < <(git tag -l --format='%(body)' $GIT_TAG)
- name: Install GitHub CLI
run: |
curl -fsSL https://github.com/github/hub/raw/master/script/get | bash -s 2.14.1
sudo mv bin/hub /usr/local/bin
- name: Print version info
id: semver
run: |
make version
- name: Set up Docker Buildx
id: buildx
uses: crazy-max/ghaction-docker-buildx@v1
with:
buildx-version: latest
qemu-version: latest

- name: Available platforms
run: echo ${{ steps.buildx.outputs.platforms }}

- name: Build
env:
DOCKER_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
USERNAME: 1gtm
APPSCODE_ENV: prod
run: |
docker login --username ${USERNAME} --password ${DOCKER_TOKEN}
make release
- name: Clone charts repository
env:
GITHUB_TOKEN: ${{ secrets.LGTM_GITHUB_TOKEN }}
run: |
cd $HOME
git clone https://1gtm:${GITHUB_TOKEN}@github.com/appscode/charts.git
cd charts
git config user.name "1gtm"
git config user.email "1gtm@appscode.com"
- name: Package
run: |
echo "install helm 3"
curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
echo "package charts"
find charts -maxdepth 1 -mindepth 1 -type d -exec helm package {} -d {} \;
helm repo index --merge $HOME/charts/stable/index.yaml --url https://charts.appscode.com/stable/ charts
mv charts/index.yaml $HOME/charts/stable/index.yaml
cd charts
find . -maxdepth 1 -mindepth 1 -type d -exec mkdir -p $HOME/charts/stable/{} \;
find . -path ./charts -prune -o -name '*.tgz' -exec mv {} $HOME/charts/stable/{} \;
- name: Check out code into the Go module directory
uses: actions/checkout@v1

- name: Print version info
id: semver
run: |
make version
- name: Set up Docker Buildx
id: buildx
uses: crazy-max/ghaction-docker-buildx@v1
with:
buildx-version: latest
qemu-version: latest

- name: Available platforms
run: echo ${{ steps.buildx.outputs.platforms }}

- name: Build
env:
DOCKER_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
USERNAME: 1gtm
APPSCODE_ENV: prod
run: |
docker login --username ${USERNAME} --password ${DOCKER_TOKEN}
make release
- name: Create pull request
env:
GITHUB_TOKEN: ${{ secrets.LGTM_GITHUB_TOKEN }}
run: |
pr_branch=${GITHUB_REPOSITORY}/${GITHUB_RUN_ID}
cd $HOME/charts
git checkout -b $pr_branch
git add --all
ct_cmd="git commit -a -s -m \"Publish $GITHUB_REPOSITORY@${{ steps.params.outputs.git_tag }} charts\""
pr_cmd=$(cat <<EOF
hub pull-request \
--labels automerge \
--message "Publish $GITHUB_REPOSITORY@${{ steps.params.outputs.git_tag }} charts"
EOF
)
if [ ! -z ${{ steps.params.outputs.release }} ]; then
ct_cmd="$ct_cmd --message \"Release: ${{ steps.params.outputs.release }}\""
pr_cmd="$pr_cmd --message \"Release: ${{ steps.params.outputs.release }}\""
fi
if [ ! -z ${{ steps.params.outputs.release_tracker }} ]; then
ct_cmd="$ct_cmd --message \"Release-tracker: ${{ steps.params.outputs.release_tracker }}\""
pr_cmd="$pr_cmd --message \"Release-tracker: ${{ steps.params.outputs.release_tracker }}\""
fi
pr_cmd="$pr_cmd --message \"Signed-off-by: $(git config --get user.name) <$(git config --get user.email)>\""
eval "$ct_cmd"
git push -u origin HEAD -f
eval "$pr_cmd"

0 comments on commit 37671b0

Please sign in to comment.