diff --git a/.github/workflows/base.yml b/.github/workflows/base.yml new file mode 100644 index 0000000..c2f28e9 --- /dev/null +++ b/.github/workflows/base.yml @@ -0,0 +1,30 @@ +name: Base image + +on: + push: + branches: [base] + +jobs: + push: + runs-on: ubuntu-latest + if: github.event_name == 'push' + + steps: + - uses: actions/checkout@v2 + + - name: Log into Github registry + run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login docker.pkg.github.com -u ${{ github.actor }} --password-stdin + + - name: Build base run image + run: | + IMAGE_ID=docker.pkg.github.com/${{ github.repository }}/base-run:$GITHUB_SHA + docker build etc/base-run --tag $IMAGE_ID + docker push $IMAGE_ID + echo Pushed new base image $IMAGE_ID + + - name: Build base build image + run: | + IMAGE_ID=docker.pkg.github.com/${{ github.repository }}/base-build:$GITHUB_SHA + docker build etc/base-build --tag $IMAGE_ID + docker push $IMAGE_ID + echo Pushed new base build image $IMAGE_ID diff --git a/.github/workflows/runtime.yml b/.github/workflows/runtime.yml new file mode 100644 index 0000000..9a18fbe --- /dev/null +++ b/.github/workflows/runtime.yml @@ -0,0 +1,29 @@ +name: Runtime image + +on: + push: + branches: [master] + +jobs: + push: + runs-on: ubuntu-latest + if: github.event_name == 'push' + + steps: + - uses: actions/checkout@v2 + + - name: Log into Github registry + run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login docker.pkg.github.com -u ${{ github.actor }} --password-stdin + + - name: Build image + run: docker build . --tag image + + - name: Push to Docker Hub + run: | + echo "${{ secrets.DOCKER_HUB_TOKEN }}" | docker login --username snoyberg --password-stdin + IMAGE_ID=snoyberg/snoyman.com + docker tag image $IMAGE_ID + docker push $IMAGE_ID + IMAGE_ID=$IMAGE_ID:$GITHUB_SHA + docker tag image $IMAGE_ID + docker push $IMAGE_ID diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml deleted file mode 100644 index 4d4b0d8..0000000 --- a/.gitlab-ci.yml +++ /dev/null @@ -1,67 +0,0 @@ -image: registry.gitlab.fpcomplete.com/fpco/default-build-image:7293 - -cache: - key: "$CI_BUILD_NAME" - paths: - - .stack-work/ - - .stack-root/ - - static/combined/ - -stages: - - build - - deploy - -variables: - STACK_ROOT: "${CI_PROJECT_DIR}/.stack-root" - DEPLOYMENT_IMAGE: "${CI_REGISTRY_IMAGE}:${CI_BUILD_REF_SLUG}_${CI_PIPELINE_ID}" - DEPLOYMENT_NAME: "stackage-server-prod" - HOOGLE_DEPLOYMENT_NAME: "stackage-server-hoogle-prod" - CRON_DEPLOYMENT_NAME: "stackage-server-cron-prod" - DEPLOYMENT_APP: "stackage-server-prod" - CRON_DEPLOYMENT_APP: "stackage-server-cron-prod" - HOOGLE_DEPLOYMENT_APP: "stackage-server-hoogle-prod" - KUBECONFIG: /etc/deploy/kubeconfig.yaml - -build: - stage: build - script: - # Clear *_TOKEN variables during code build so that compile-time code can't access them - - apt-get update && apt-get install -y --no-install-recommends libpq-dev git rsync - - CI_BUILD_TOKEN="" KUBECONFIG_YAML="" KUBE_TOKEN="" PROD_KUBE_TOKEN="" PROD_DOCKER_PASSWORD="" etc/scripts/stage_docker.sh --install-ghc --test - - docker build -t "${DEPLOYMENT_IMAGE}" etc/docker - - docker login -u gitlab-ci-token -p "${CI_BUILD_TOKEN}" "${CI_REGISTRY}" - - docker push "${DEPLOYMENT_IMAGE}" - - | - if [[ "$CI_BUILD_REF_NAME" == "master" ]]; then - docker tag "${DEPLOYMENT_IMAGE}" "${CI_REGISTRY_IMAGE}:latest" - docker push "${CI_REGISTRY_IMAGE}:latest" - fi - if [[ "$CI_BUILD_REF_NAME" == "ci-cron" ]]; then - docker tag "${DEPLOYMENT_IMAGE}" "${CI_REGISTRY_IMAGE}:ci-cron" - docker push "${CI_REGISTRY_IMAGE}:ci-cron" - fi - -deploy_prod: - stage: deploy - only: - - master - # when: manual - environment: - name: production - url: https://www.stackage.org/ - variables: - CRON_DEPLOYMENT_NAME: "stackage-server-cron-prod" - DEPLOYMENT_NAME: "stackage-server-prod" - HOOGLE_DEPLOYMENT_NAME: "stackage-server-hoogle-prod" - KUBE_NAMESPACE: "${PROD_KUBE_NAMESPACE}" - PROD_DEPLOYMENT_IMAGE: "fpco/stackage-server-prod:${CI_BUILD_REF_SLUG}_${CI_PIPELINE_ID}" - script: - - mkdir -p /etc/deploy - - echo "${KUBECONFIG_YAML}" > /etc/deploy/kubeconfig.enc - - base64 -d ${KUBECONFIG} - - kubectl set image "deployment/stackage-server-prod" stackage-server="$DEPLOYMENT_IMAGE" - - kubectl set image "deployment/stackage-server-cron-prod" stackage-server-cron="$DEPLOYMENT_IMAGE" - - kubectl set image "deployment/stackage-server-hoogle-prod" stackage-server-hoogle="$DEPLOYMENT_IMAGE" - - kubectl rollout status "deployment/stackage-server-prod" - - kubectl rollout status "deployment/stackage-server-hoogle-prod" - - kubectl rollout status "deployment/stackage-server-cron-prod" diff --git a/etc/base-build/Dockerfile b/etc/base-build/Dockerfile new file mode 100644 index 0000000..f72bdf4 --- /dev/null +++ b/etc/base-build/Dockerfile @@ -0,0 +1,5 @@ +FROM fpco/stack-build:lts-15.5 + +RUN stack update +COPY stack.yaml stackage-server.cabal /src/ +RUN stack build --only-snapshot --stack-yaml /src/stack.yaml diff --git a/etc/base-run/Dockerfile b/etc/base-run/Dockerfile new file mode 100644 index 0000000..ecb4d78 --- /dev/null +++ b/etc/base-run/Dockerfile @@ -0,0 +1,6 @@ +FROM fpco/stack-run@sha256:4b170ac899755a89c0295b7726c5530015211055125f6e3f6c5b902cb3e9b74b + +RUN export DEBIAN_FRONTEND=noninteractive && \ + apt-get update && \ + wget -qO- https://get.haskellstack.org/ | sh -x && \ + unset DEBIAN_FRONTEND diff --git a/stack.yaml b/stack.yaml index 6d71a92..5c8f607 100644 --- a/stack.yaml +++ b/stack.yaml @@ -1,6 +1,4 @@ -resolver: nightly-2020-02-08 -packages: - - '.' +resolver: lts-15.6 extra-deps: - barrier-0.1.1@sha256:2021f84c3aba67bb635d72825d3bc0371942444dc014bc307b875071e29eea98,3931 - hackage-security-0.6.0.0@sha256:69987d46e7b55fe5f0fc537021c3873c5f6f44a6665d349ee6995fd593df8147,11976