Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Github Actions workflow, attempt 2 #642

Merged
merged 62 commits into from
Jan 30, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
8aece89
test gha docker setup
lmickh Dec 2, 2021
76ef3fb
test gha docker login
lmickh Dec 2, 2021
c120dbb
test buildx
lmickh Dec 2, 2021
0ecd4ca
fix variable names
lmickh Dec 2, 2021
d80e858
test buildx
lmickh Dec 2, 2021
e92f577
test cache
lmickh Dec 2, 2021
cb4960a
amd64 only with gha cache
lmickh Dec 2, 2021
8c07700
Adjust docker layers
lmickh Dec 3, 2021
004a020
Adjust docker layers
lmickh Dec 3, 2021
6937630
Adjust docker layers
lmickh Dec 3, 2021
cd8c812
add workflow concurrency
lmickh Dec 3, 2021
1873f4a
Adds static code job
lmickh Dec 3, 2021
5402bfd
change concurrency
lmickh Dec 3, 2021
2359738
Why is this a yaml error?
lmickh Dec 3, 2021
f7c355f
add lint install
lmickh Dec 3, 2021
497de9b
Why is this a yaml error?
lmickh Dec 3, 2021
f238ed2
really?
lmickh Dec 3, 2021
18b601b
maybe?
lmickh Dec 3, 2021
d7703b6
maybe?
lmickh Dec 3, 2021
ad6c244
maybe?
lmickh Dec 3, 2021
347dd84
maybe?
lmickh Dec 3, 2021
23eb178
maybe?
lmickh Dec 3, 2021
c42b1ee
maybe?
lmickh Dec 3, 2021
53db67f
maybe?
lmickh Dec 3, 2021
648d6ea
maybe?
lmickh Dec 3, 2021
4c4461b
maybe?
lmickh Dec 3, 2021
3c7a27a
maybe?
lmickh Dec 3, 2021
43700b4
maybe?
lmickh Dec 3, 2021
81aef3b
lame. you have to have branches in the push for concurrency to work
lmickh Dec 3, 2021
b4b36da
lame. you have to have branches in the push for concurrency to work
lmickh Dec 3, 2021
71e4248
/
lmickh Dec 3, 2021
d384316
how is zipp missing?
lmickh Dec 3, 2021
494f785
install static deps
lmickh Dec 3, 2021
5a0acfb
Adds tests
lmickh Dec 3, 2021
510155a
Fix hub namespace
lmickh Dec 3, 2021
6e2516c
Refactor tags
lmickh Dec 3, 2021
06f2038
so picky
lmickh Dec 3, 2021
0a26079
split sha from env
lmickh Dec 3, 2021
a58a450
delay docker push
lmickh Dec 3, 2021
96c853b
test load and push in docker action at same time
lmickh Dec 3, 2021
c014e3c
split load/push again with condition
lmickh Dec 3, 2021
9f14289
Add manifest
lmickh Dec 3, 2021
390199f
add needs
lmickh Dec 3, 2021
b9bd0c7
comment arm64 manifest
lmickh Dec 4, 2021
802d58d
forgot login
lmickh Dec 5, 2021
7f2c8a0
Add arm64 back for manifest test
lmickh Dec 5, 2021
3c683c1
Add arm64 back for manifest test
lmickh Dec 5, 2021
623fa46
Add arm64 back for manifest test
lmickh Dec 5, 2021
4eb37b5
remove arm64 3.8
lmickh Dec 5, 2021
60bd132
Adds 30s sleep cause Docker Hub thinks files don't exist
lmickh Dec 5, 2021
697fc9f
I'm just an idiot
lmickh Dec 5, 2021
3827ba0
Remove sleep
lmickh Dec 5, 2021
35a5fb3
Separate arm64 workflow
lmickh Dec 7, 2021
c8fe131
Fix name/concurrency for arm64
lmickh Dec 7, 2021
9716c7f
Drop Python 2.7 and 3.6 support from GHA (#305)
squeaky-pl Jan 7, 2022
c4ad871
Install linting with no-deps
tsx Jan 29, 2024
a0a481c
Remove setproctitle test
tsx Jan 29, 2024
22acef4
Update actions
tsx Jan 30, 2024
bd6c833
Add platformdirs
tsx Jan 30, 2024
c0c18e0
Add packaging
tsx Jan 30, 2024
7f3070d
Update more actions
tsx Jan 30, 2024
eb35484
Fix formatting
tsx Jan 30, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
185 changes: 185 additions & 0 deletions .github/workflows/build-and-release.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,185 @@
name: Build and Release

on:
push:
branches:
- '*'

concurrency:
group: build-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

env:
DOCKERHUB_NAMESPACE: closeio
PROJECT: sync-engine
# TODO: Remove this after migration
TAG_SUFFIX: "-gha"

jobs:
static-code-analysis:
runs-on: ubuntu-20.04
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: '3.8'
architecture: 'x64'

- name: Install dependencies
run: |
python -m pip install --upgrade pip
python -m pip install --no-deps -r requirements/lint.txt

- name: Run Black
run: black --check .

- name: Run isort
run: isort -c .

- name: Run flake8
run: flake8


build:
runs-on: ubuntu-20.04

strategy:
matrix:
include:
- arch: amd64
build_name: py3.7
dockerhub_push: false
python_version: "3.7"
run_tests: true
- arch: amd64
build_name: py3.8
dockerhub_push: true
python_version: "3.8"
run_tests: true
- arch: amd64
build_name: py3.9
dockerhub_push: false
python_version: "3.9"
run_tests: true

# The qemu arm64 builds are *very* slow so they are split out into
# their own workflow

# - arch: arm64
# build_name: py3.8
# dockerhub_push: true
# python_version: "3.8"
# run_tests: false

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Get short sha
id: vars
run: |
echo ::set-output name=sha_short::${GITHUB_SHA::16}
shell: bash

- name: Prepare environment
run: |
if [ "$(git log -1 --pretty=%B | head -n 1 | grep '#notests')" ]; then
echo 'SKIP_TESTS="1"' >> $GITHUB_ENV
fi
echo "DOCKER_IMAGE_TAG=${{ env.DOCKERHUB_NAMESPACE }}/${{ env.PROJECT }}:${{ steps.vars.outputs.sha_short }}-${{ matrix.build_name}}${{ env.TAG_SUFFIX }}-${{ matrix.arch }}" >> $GITHUB_ENV
shell: bash

- name: Set up QEMU
uses: docker/setup-qemu-action@v3

- name: Set up Docker context for Buildx
id: buildx-context
run: |
docker context create container-builder

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
version: latest
endpoint: container-builder

- name: Login to DockerHub
# if: ${{ github.ref == 'master' && github.event.pull_request.merged == true }}
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}

- name: Build and push sync-engine images
uses: docker/build-push-action@v5
with:
platforms: linux/${{ matrix.arch }}
push: false
load: true
build-args:
PYTHON_VERSION=${{ matrix.python_version }}
tags: |
${{ env.DOCKER_IMAGE_TAG }}
cache-from: type=gha
cache-to: type=gha,mode=max

- name: Run tests
if: ${{ matrix.run_tests }}
run: |
docker tag ${{ env.DOCKER_IMAGE_TAG }} ${{ env.PROJECT }}_app
if [[ -z $SKIP_TESTS ]]; then
docker-compose run app bash -ec '
bin/wait-for-it.sh mysql:3306 \
&& NYLAS_ENV=test pytest --cov-report= --cov=inbox tests/ \
&& coverage html -d pythoncov
'
else
echo Skipping tests
fi

- name: Push image
if: ${{ matrix.dockerhub_push }}
run: |
docker push ${{ env.DOCKER_IMAGE_TAG }}

multi-arch-manifest:
needs:
- build

runs-on: ubuntu-20.04

strategy:
matrix:
include:
- build_name: py3.8

steps:
- name: Get short sha
id: vars
run: |
echo ::set-output name=sha_short::${GITHUB_SHA::16}
shell: bash

- name: Prepare environment
run: |
if [ "$(git log -1 --pretty=%B | head -n 1 | grep '#notests')" ]; then
echo 'SKIP_TESTS="1"' >> $GITHUB_ENV
fi
echo "DOCKER_IMAGE_TAG=${{ env.DOCKERHUB_NAMESPACE }}/${{ env.PROJECT }}:${{ steps.vars.outputs.sha_short }}-${{ matrix.build_name}}${{ env.TAG_SUFFIX }}" >> $GITHUB_ENV
shell: bash

- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}

- name: Create manifest
run: |
docker buildx imagetools create \
-t ${{ env.DOCKER_IMAGE_TAG }} \
${{ env.DOCKER_IMAGE_TAG }}-amd64
# ${{ env.DOCKER_IMAGE_TAG }}-arm64
140 changes: 140 additions & 0 deletions .github/workflows/build-arm64.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
name: Build arm64

on:
push:
branches:
- '*'

concurrency:
group: build-arm64-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

env:
DOCKERHUB_NAMESPACE: closeio
PROJECT: sync-engine
# TODO: Remove this after migration
TAG_SUFFIX: "-gha"

jobs:
build-arm64:
runs-on: ubuntu-20.04

strategy:
matrix:
include:
- arch: arm64
build_name: py3.8
dockerhub_push: true
python_version: "3.8"
run_tests: false

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Get short sha
id: vars
run: |
echo ::set-output name=sha_short::${GITHUB_SHA::16}
shell: bash

- name: Prepare environment
run: |
if [ "$(git log -1 --pretty=%B | head -n 1 | grep '#notests')" ]; then
echo 'SKIP_TESTS="1"' >> $GITHUB_ENV
fi
echo "DOCKER_IMAGE_TAG=${{ env.DOCKERHUB_NAMESPACE }}/${{ env.PROJECT }}:${{ steps.vars.outputs.sha_short }}-${{ matrix.build_name}}${{ env.TAG_SUFFIX }}-${{ matrix.arch }}" >> $GITHUB_ENV
shell: bash

- name: Set up QEMU
uses: docker/setup-qemu-action@v3

- name: Set up Docker context for Buildx
id: buildx-context
run: |
docker context create container-builder

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
version: latest
endpoint: container-builder

- name: Login to DockerHub
# if: ${{ github.ref == 'master' && github.event.pull_request.merged == true }}
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}

- name: Build and push sync-engine images
uses: docker/build-push-action@v5
with:
platforms: linux/${{ matrix.arch }}
push: false
load: true
build-args:
PYTHON_VERSION=${{ matrix.python_version }}
tags: |
${{ env.DOCKER_IMAGE_TAG }}
cache-from: type=gha
cache-to: type=gha,mode=max

- name: Run tests
if: ${{ matrix.run_tests }}
run: |
docker tag ${{ env.DOCKER_IMAGE_TAG }} ${{ env.PROJECT }}_app
if [[ -z $SKIP_TESTS ]]; then
docker-compose run app bash -ec '
bin/wait-for-it.sh mysql:3306 \
&& NYLAS_ENV=test pytest --cov-report= --cov=inbox tests/ \
&& coverage html -d pythoncov
'
else
echo Skipping tests
fi

- name: Push image
if: ${{ matrix.dockerhub_push }}
run: |
docker push ${{ env.DOCKER_IMAGE_TAG }}

multi-arch-manifest:
needs:
- build-arm64

runs-on: ubuntu-20.04

strategy:
matrix:
include:
- build_name: py3.8

steps:
- name: Get short sha
id: vars
run: |
echo ::set-output name=sha_short::${GITHUB_SHA::16}
shell: bash

- name: Prepare environment
run: |
if [ "$(git log -1 --pretty=%B | head -n 1 | grep '#notests')" ]; then
echo 'SKIP_TESTS="1"' >> $GITHUB_ENV
fi
echo "DOCKER_IMAGE_TAG=${{ env.DOCKERHUB_NAMESPACE }}/${{ env.PROJECT }}:${{ steps.vars.outputs.sha_short }}-${{ matrix.build_name}}${{ env.TAG_SUFFIX }}" >> $GITHUB_ENV
shell: bash

- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}

# Because the arm64 builds are so much slower, we assume they will just
# be appended to the existing manifest created by `build-and-release.yaml`.
- name: Create manifest
run: |
docker buildx imagetools create --append \
-t ${{ env.DOCKER_IMAGE_TAG }} \
${{ env.DOCKER_IMAGE_TAG }}-arm64
2 changes: 2 additions & 0 deletions requirements/lint.txt
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,9 @@ flake8-tidy-imports==4.10.0
mccabe==0.7.0
mypy==1.8.0
regex==2023.12.25
packaging==23.2
pathspec==0.12.1
platformdirs==4.1.0
pyflakes==3.2.0
pycodestyle==2.9.1
toml==0.10.2
Expand Down
10 changes: 0 additions & 10 deletions tests/test_misc.py
Original file line number Diff line number Diff line change
@@ -1,18 +1,8 @@
import pytest
import setproctitle

from inbox.models.backends.oauth import hash_token


def test_setproctitle_works():
original_proctitle = setproctitle.getproctitle()

setproctitle.setproctitle(test_setproctitle_works.__name__)
assert setproctitle.getproctitle() == test_setproctitle_works.__name__

setproctitle.setproctitle(original_proctitle)


@pytest.mark.parametrize(
"prefix,token,expected",
[
Expand Down
Loading