Lompat ke konten
dokumentasi.id
Commit dd5271a
v2
Star6,4 rb

Kamu membaca versi lama. Halaman ini hanya bisa dibaca.

6

Build, Rilis, dan Publikasi

APKLeaks keluar lewat dua kanal: paket Python di PyPI dan image Docker di Docker Hub. README mendokumentasikan keduanya sebagai pip3 install apkleaks dan docker pull dwisiswant0/apkleaks:latest. README.md:27-31 README.md:43-49 Makefile merangkai build dan unggah kedua kanal itu di mesin lokal, sedangkan .github/workflows/publish.yaml mengulang jalur image setiap kali tag v* didorong. Analisis statis CodeQL berjalan di alur terpisah dan tidak menyentuh artefak rilis.

Variabel dan turunan versi

Makefile menetapkan AUTHOR := dwisiswant0 dan APP := apkleaks, lalu menurunkan IMAGE := $(AUTHOR)/$(APP) menjadi dwisiswant0/apkleaks. VERSION dibaca dari berkas VERSION dengan cat VERSION | tr -d '\n', sedangkan PACKAGE membuang karakter pertama nilai itu lewat cut -c 2- agar nama paket tidak membawa awalan v. Makefile:1-5 Nilai yang terbaca pada commit ini adalah v2.6.3. VERSION:1-1

Pemilihan interpreter juga dinamis: bila direktori venv sudah ada, PYTHON diganti menjadi venv/bin/python3. Makefile:7-14 Target venv membuat virtualenv dengan python3 -m venv venv, setup memasang requirements.txt lalu paket build dan twine, dan setup-venv menjalankan setup dengan PYTHON diarahkan ke virtualenv tersebut. Makefile:16-25

VariabelDefinisi di MakefileNilai pada commit ini
APPliteralapkleaks
IMAGE$(AUTHOR)/$(APP)dwisiswant0/apkleaks
VERSIONisi berkas VERSION tanpa newlinev2.6.3
PACKAGE$(APP)- plus VERSION tanpa karakter pertamaapkleaks-2.6.3

Makefile:1-5 VERSION:1-1

Graf target Makefile

Target Make saling bergantung lewat prerequisite, bukan lewat urutan penulisan badan resep. build-all menarik build-package dan build-images sekaligus, dan upload-all menarik upload-package serta upload-images. Makefile:48-50 docker hanya alias untuk build-images, sehingga tidak menambah langkah build baru. Makefile:46-46 Target pypi menarik check-package dan build-package. Makefile:36-36

graph TD
  venv["venv"] --> setup["setup"]
  venv --> setupvenv["setup-venv"]
  setup --> buildpkg["build-package"]
  setup --> checkpkg["check-package"]
  checkpkg --> pypi["pypi"]
  buildpkg --> pypi
  buildpkg --> uploadpkg["upload-package"]
  buildimg["build-images"] --> docker["docker"]
  buildimg --> uploadimg["upload-images"]
  buildpkg --> buildall["build-all"]
  buildimg --> buildall
  uploadpkg --> uploadall["upload-all"]
  uploadimg --> uploadall
  clean["clean"]
  style venv fill:#8b5cf6,color:#fff
  style setup fill:#8b5cf6,color:#fff
  style setupvenv fill:#8b5cf6,color:#fff
  style buildpkg fill:#2d7d46,color:#fff
  style buildimg fill:#2d7d46,color:#fff
  style uploadpkg fill:#2d7d46,color:#fff
  style uploadimg fill:#2d7d46,color:#fff
  style buildall fill:#336791,color:#fff
  style uploadall fill:#336791,color:#fff
  style pypi fill:#f59e0b,color:#000
  style checkpkg fill:#f59e0b,color:#000
  style clean fill:#dc2626,color:#fff
  style docker fill:#8b5cf6,color:#fff
%% fig: Graf target Makefile
%% desc: Prerequisite mengarahkan build-package dan build-images ke target gabungan build-all serta ke target unggah upload-all.
Fig. 1: Graf target MakefilePrerequisite mengarahkan build-package dan build-images ke target gabungan build-all serta ke target unggah upload-all.

Jalur paket Python

build-package menjalankan $(PYTHON) -m build, check-package memvalidasi metadata dist/$(PACKAGE)* dengan twine check, dan upload-package mendorong berkas yang sama dengan twine upload. Makefile:27-36 Metadata build diambil dari pyproject.toml: version bersifat dinamis dari berkas VERSION dan dependencies dibaca dari requirements.txt. pyproject.toml:22-24 Satu-satunya dependency runtime yang tercatat saat ini adalah pyaxmlparser>=0.3.24. requirements.txt:1

Backend build adalah setuptools.build_meta dengan requires = ["setuptools>=68"]. pyproject.toml:32-34 [project.scripts] memasang perintah apkleaks yang menunjuk ke apkleaks.cli:main, sedangkan package-data menyertakan *.json untuk paket apkleaks* dan config* agar berkas pola ikut terpasang. pyproject.toml:16-17 pyproject.toml:26-30 Konsekuensinya, versi yang dibaca header() pada instalasi PyPI berasal dari metadata paket, dengan fallback terakhir membaca berkas VERSION bila metadata tidak tersedia. apkleaks/cli.py:10-19 Rincian pemasangan untuk pemakai akhir ada di Instalasi dan Dependensi.

TargetPerintahEfek
build-package$(PYTHON) -m buildmenulis artefak ke dist/
check-packagetwine check dist/$(PACKAGE)*memeriksa metadata rilis
upload-packagetwine upload dist/$(PACKAGE)*mengunggah ke PyPI

Makefile:27-36

Jalur image Docker

build-images membangun image dari Dockerfile di direktori kerja dengan tag dwisiswant0/apkleaks:latest, lalu menandainya ulang dengan $(VERSION) sehingga muncul tag kedua bernilai v2.6.3. upload-images mendorong kedua tag itu. Makefile:38-44 Dockerfile berangkat dari python:3-slim, memasang openjdk-17-jre-headless dan unzip, mengunduh rilis jadx 1.2.0 dari GitHub, membuka zip ke /opt/jadx, dan membuat symlink /usr/local/bin/jadx. Dockerfile:1-16 Setelah itu WORKDIR diset ke /app, requirements.txt disalin dan dipasang, seluruh isi repository disalin, dan image dijalankan lewat ENTRYPOINT ["python", "/app/apkleaks.py"]. Dockerfile:18-25

graph TD
  base["python:3-slim"] --> toolchain["openjdk-17-jre-headless dan unzip"]
  toolchain --> jadx["jadx 1.2.0 di /opt/jadx"]
  jadx --> deps["pip install requirements.txt"]
  deps --> copy["COPY . . ke /app"]
  copy --> entry["ENTRYPOINT python /app/apkleaks.py"]
  style base fill:#f59e0b,color:#000
  style toolchain fill:#8b5cf6,color:#fff
  style jadx fill:#8b5cf6,color:#fff
  style deps fill:#336791,color:#fff
  style copy fill:#336791,color:#fff
  style entry fill:#2d7d46,color:#fff
%% fig: Urutan lapisan build Dockerfile
%% desc: Image dibangun dari python:3-slim, ditambah JDK dan jadx, lalu dependencies dan kode APKLeaks disalin sebelum entrypoint dijalankan.
Fig. 2: Urutan lapisan build DockerfileImage dibangun dari python:3-slim, ditambah JDK dan jadx, lalu dependencies dan kode APKLeaks disalin sebelum entrypoint dijalankan.

Workflow Publish

publish.yaml berjalan pada push tag v* dan pada workflow_dispatch yang mewajibkan input tag. .github/workflows/publish.yaml:1-11 Satu variabel VERSION menyatukan kedua jalur: nilainya github.event.inputs.tag untuk dispatch dan github.ref_name untuk push tag, lalu dipakai sebagai ref pada actions/checkout@v4 dengan fetch-depth: 0. .github/workflows/publish.yaml:13-23

docker/metadata-action@v5 dengan id: meta menurunkan daftar tag dari images: ${{ github.repository }} memakai type=schedule, tiga pola type=semver ({{version}} dengan match=v(\d.\d.\d), {{major}}.{{minor}} dengan match=v(\d.\d), {{major}} dengan match=v(\d)), dan type=sha. .github/workflows/publish.yaml:25-34 Setelah QEMU dan Buildx disiapkan, docker/login-action@v3 masuk memakai secrets.DOCKER_USERNAME dan secrets.DOCKER_TOKEN, lalu docker/build-push-action@v6 mendorong image dengan push: true, tags dan labels dari output meta, serta build-args VERSION=${{ env.VERSION }}. .github/workflows/publish.yaml:36-49

graph LR
  tag["push tag v*"] --> ver["env VERSION"]
  dispatch["workflow_dispatch input tag"] --> ver
  ver --> checkout["actions/checkout ref VERSION"]
  checkout --> meta["docker/metadata-action id meta"]
  meta --> taglist["tags semver dan sha"]
  meta --> labels["labels"]
  taglist --> buildpush["docker/build-push-action"]
  labels --> buildpush
  qemu["setup-qemu-action"] --> buildpush
  buildx["setup-buildx-action"] --> buildpush
  login["docker/login-action"] --> buildpush
  secrets["secrets DOCKER_USERNAME dan DOCKER_TOKEN"] --> login
  buildpush --> hub["image di Docker Hub"]
  style tag fill:#f59e0b,color:#000
  style dispatch fill:#f59e0b,color:#000
  style ver fill:#8b5cf6,color:#fff
  style meta fill:#8b5cf6,color:#fff
  style taglist fill:#8b5cf6,color:#fff
  style secrets fill:#dc2626,color:#fff
  style login fill:#dc2626,color:#fff
  style buildpush fill:#2d7d46,color:#fff
  style hub fill:#336791,color:#fff
%% fig: Alur workflow Publish
%% desc: Tag atau input manual menentukan VERSION, metadata-action menurunkan tag image, lalu build-push-action mendorong image ke Docker Hub.
Fig. 3: Alur workflow PublishTag atau input manual menentukan VERSION, metadata-action menurunkan tag image, lalu build-push-action mendorong image ke Docker Hub.
StepAction atau nilaiPeran
checkoutactions/checkout@v4, ref: "${{ env.VERSION }}"mengambil kode tepat pada tag rilis
metadocker/metadata-action@v5menurunkan tag dari semver dan sha
logindocker/login-action@v3autentikasi ke Docker Hub
builddocker/build-push-action@v6, push: truebuild dan dorong image

.github/workflows/publish.yaml:36-49

Analisis CodeQL

codeql.yaml menjalankan satu job analyze di ubuntu-latest dengan matrix satu bahasa, python, dan fail-fast: false agar kegagalan satu entri tidak membatalkan entri lain. .github/workflows/codeql.yaml:14-22

EventKonfigurasi
pushbranch master
pull_requestbranch master dan dev
schedulecron 26 16 * * 0

.github/workflows/codeql.yaml:1-12

Langkah analisis memakai actions/checkout@v2, lalu github/codeql-action/init@v1 dengan languages: ${{ matrix.language }}, github/codeql-action/autobuild@v1, dan github/codeql-action/analyze@v1. .github/workflows/codeql.yaml:22-32 Versi action di berkas ini tertinggal dari publish.yaml yang sudah memakai actions/checkout@v4 dan action v5/v6. Prosedur pelaporan temuan ada di Kebijakan Keamanan dan Pelaporan Kerentanan.

Catatan operasional

⚠️ make pypi mendaftarkan check-package sebagai prerequisite pertama. GNU Make menjalankan prerequisite dari kiri ke kanan pada build non-paralel, jadi twine check dist/$(PACKAGE)* berjalan sebelum python -m build. Pada salinan bersih, dist/ belum ada sehingga glob tidak menemukan berkas. Makefile:36-36 Jalankan make build-package check-package dua kali berurutan, atau panggil upload-package setelah build-package. Makefile:27-36

⚠️ make clean bersifat destruktif: rm -rfv dist/ venv/ menghapus artefak build dan virtualenv, lalu docker image rm -f dwisiswant0/apkleaks menghapus image lokal. Nama image pada baris itu ditulis literal, bukan lewat $(IMAGE), sehingga pemindahan variabel IMAGE tidak mengubah sasarannya. Makefile:52-54

⚠️ publish.yaml mengirim build-args VERSION=${{ env.VERSION }}, tetapi Dockerfile tidak mendeklarasikan ARG VERSION. Nilai itu hanya tercermin pada tag image, bukan pada lapisan build. .github/workflows/publish.yaml:36-49 Dockerfile:1-16

⚠️ Makefile menandai image dengan string VERSION apa adanya (dwisiswant0/apkleaks:v2.6.3), sedangkan metadata-action menurunkan tag lewat pola {{version}}, {{major}}.{{minor}}, dan {{major}} yang bekerja pada nilai hasil match=v(\d.\d.\d). Periksa tag yang benar-benar terbit di Docker Hub sebelum menarik image. Makefile:38-44 .github/workflows/publish.yaml:25-34