diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 000000000..027f4e670 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,39 @@ +--- +name: Release eda-server + +env: + LC_ALL: "C.UTF-8" # prevent ERROR: Ansible could not initialize the preferred locale: unsupported locale setting + +on: + workflow_dispatch: + +jobs: + stage: + runs-on: ubuntu-latest + timeout-minutes: 90 + permissions: + packages: write + contents: write + steps: + - name: Install go-task + run: | + curl -sL https://taskfile.dev/install.sh | sh + mv ./bin/task /usr/local/bin/task + task --version + + - name: Checkout eda-server + uses: actions/checkout@v3 + + - name: Get python version from Taskfile + run: echo py_version=`task PYTHON_VERSION` >> $GITHUB_ENV + + - name: Install python ${{ env.py_version }} + uses: actions/setup-python@v4 + with: + python-version: ${{ env.py_version }} + + - name: Install python deeps + run: pip install -r requirements_dev.txt + + - name: Create release + run: ansible-playbook tools/ansible/release.yml -i localhost -e github_token=${{ secrets.GITHUB_TOKEN }} diff --git a/Taskfile.dist.yaml b/Taskfile.dist.yaml index 5d6dd7173..d8358e067 100644 --- a/Taskfile.dist.yaml +++ b/Taskfile.dist.yaml @@ -355,3 +355,16 @@ tasks: - task: macpodman vars: CLI_ARGS: tunnel + + build:release: + desc: "builds all the files needed for a release" + cmds: + - cmd: mkdir -p dist + - cmd: tar -zcvf dist/eda-server.tar.gz LICENSE README.md Taskfile.dist.yaml docs poetry.lock pyproject.toml pytest.ini requirements_dev.txt scripts setup.cfg src tests tools + + + PYTHON_VERSION: + desc: "Return the required python version for build tools" + cmds: + - cmd: echo "3.9" + silent: true diff --git a/pyproject.toml b/pyproject.toml index 3ebf202ae..344e281b2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,7 +8,7 @@ build-backend = "poetry.core.masonry.api" [tool.poetry] name = "aap-eda" -version = "0.2.0" +version = "2024.3.4" description = "" authors = ["Red Hat, Inc. "] readme = "README.md" @@ -120,3 +120,25 @@ ban-relative-imports = "parents" [tool.ruff.pydocstyle] convention = "pep257" + +[tool.setuptools_scm] +version_scheme = "calver-by-date" + +[tool.bumpver] +current_version = "2024.3.4" +version_pattern = "YYYY.MM.DD" +commit_message = "chore: bump version {old_version} -> {new_version}" +tag_message = "{new_version}" +tag_scope = "default" +pre_commit_hook = "" +post_commit_hook = "" +commit = true +tag = true +push = true + +[tool.bumpver.file_patterns] +"pyproject.toml" = [ + 'current_version = "{version}"', + 'version = "{version}"', +] + diff --git a/requirements_dev.txt b/requirements_dev.txt new file mode 100644 index 000000000..30bf6b7c5 --- /dev/null +++ b/requirements_dev.txt @@ -0,0 +1,3 @@ +ansible +setuptools_scm +bumpver diff --git a/tools/ansible/release.yml b/tools/ansible/release.yml new file mode 100644 index 000000000..4301c479a --- /dev/null +++ b/tools/ansible/release.yml @@ -0,0 +1,80 @@ +--- +- name: Release eda-server + hosts: localhost + connection: local + gather_facts: true + vars: + repo_identifier: "ansible/eda-server" + api_repo_prefix: "https://api.github.com/repos/{{ repo_identifier }}" + + # Note: + # When this playbook runs it will run in the directory of the playbook so ../../ would be a reference to the eda-server root + + tasks: + - name: Generate calver release number + set_fact: + # setuptools-scm will strip leading 0's off the date format so we need to do that too + release_number: "{{ (ansible_date_time.date | to_datetime('%Y-%m-%d')).strftime('%Y.%m.%d') | regex_replace('\\.0', '.') }}" + + - name: Tag the repo + command: + cmd: "git tag -f {{ release_number }}" + + - name: Get the build number from setuptools-scm + command: + cmd: python -m setuptools_scm + register: setuptools_command_version + + - name: Make sure the selected release number and setuptools_scm agree + assert: + that: + release_number == setuptools_command_version.stdout + msg: "We expected the release number to be {{ release_number }} but setuptools-scm wanted it to be {{ setuptools_command_version.stdout }}" + + - name: Build eda-server + command: + cmd: task build:release + args: + chdir: '../../' + tags: + - build + + - name: Create release in github + uri: + url: "{{ api_repo_prefix }}/releases" + method: POST + body_format: json + body: + tag_name: "{{ release_number }}" + name: "v{{ release_number }}" + draft: False + generate_release_notes: True + status_code: + - 201 + headers: + Accept: 'application/vnd.github.v3+json' + Authorization: 'bearer {{ github_token }}' + register: new_release_response + tags: + - github + + - name: Upload the build files + uri: + # For some reason the upload_url ends with eda-server/releases/138751035/assets{?name,label} + # We have to strip that off before adding our args to the URLs + url: "{{ new_release_response.json['upload_url'] | regex_replace('{.*}', '') }}?name={{ file_name }}" + method: POST + src: "{{ item }}" + status_code: + - 201 + headers: + Accept: 'application/vnd.github.v3+json' + Authorization: 'bearer {{ github_token }}' + Content-Type: "{{ file_name.endswith('tar.gz') | ternary('application/gzip', 'application/x-wheel+zip') }}" + vars: + file_name: "{{ item | basename }}" + loop: "{{ lookup('ansible.builtin.fileglob', '../../dist/*', wantlist=True) }}" + loop_control: + label: "{{ item | basename }}" + tags: + - github